DALSA.SaperaLT.SapClassBasic无法加载,试图加载格式不正确的程序,c#

AI摘要

本文针对C# WPF项目中DALSA.SaperaLT.SapClassBasic无法加载的问题,分析常见原因并提供系统化解决路径:包括.NET Framework与.NET Core框架对应DLL的正确选用、多目标框架下条件引用配置、避免程序集嵌入导致的依赖缺失、跨机器部署时运行时环境一致性校验,以及通过环境变量或显式拷贝方式确保原生DLL可被定位。

情景:用c#wpf写DALSA线扫相机的项目,生成时不报错,运行到DALSA相关的代码就报错找不到dll
在这里插入图片描述


一.根据框架选择dll

  • 如果是.net framework框架(比如说.net480),就选择Teledyne DALSA\Sapera\Components\NET\Bin\DALSA.SaperaLT.SapClassBasic.dll
  • 如果是.net core框架(比如说.net6.0),就选择Teledyne DALSA\Sapera\Components\NET\Bin\DALSA.SaperaLT.SapClassBasic.Core.dll
  • 注意,这两个框架的dll不能用反了,否则要报dll无法加载的错误。

二. 如果对一个项目,要生成两个不同框架的版本,要引用两个dll怎么办?

1.用记事本打开你用到DALSA DLL的项目的csproj
2.让该项目支持两个框架:

  <PropertyGroup>
    <OutputType>Library</OutputType>
     <TargetFrameworks>net6.0-windows;net48</TargetFrameworks>
    <UseWPF>true</UseWPF>
    <Platforms>AnyCPU;x64</Platforms>
  </PropertyGroup>

3.让不同框架下用不同的dll:

  <ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
    <Reference Include="DALSA.SaperaLT.SapClassBasic">
	  <HintPath>E:\Software\Teledyne DALSA\Sapera\Components\NET\Bin\DALSA.SaperaLT.SapClassBasic.dll</HintPath>
    </Reference>
  </ItemGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0-windows' ">
    <Reference Include="DALSA.SaperaLT.SapClassBasic.Core">
	  <HintPath>E:\Software\Teledyne DALSA\Sapera\Components\NET\Bin\DALSA.SaperaLT.SapClassBasic.Core.dll</HintPath>
    </Reference>
  </ItemGroup>

三.dll嵌入了主程序集的原因

查看启动项目的FodyWeavers.xml,排除 DALSA.SaperaLT.SapClassBasic.Core 和 DALSA.SaperaLT.SapClassBasic 两个程序集,不将它们嵌入到主程序集中。

<Costura IncludeRuntimeReferences='false' >
	<ExcludeAssemblies>
		DALSA.SaperaLT.SapClassBasic.Core
		DALSA.SaperaLT.SapClassBasic
	</ExcludeAssemblies>
</Costura>

四.本地运行不报错,打包发到别的电脑上报错dll无法加载

查看本地电脑装的Teledyne DALSA Sapera LT SDK是哪个版本的,别的电脑上的Teledyne DALSA Sapera LT SDK要与本地保持一致。
在这里插入图片描述

五.设置环境变量或者复制dll

设置这两个dll的环境变量,或者:
复制 DALSA.SaperaLT.SapClassBasic.dll 到 C:\Windows\System32 下。
复制 DALSA.SaperaLT.SapClassBasic.Core.dll 到 C:\Windows\SysWOW64 下。

上一篇: DependencyProperty.Register:wpf 向别的控件传递参数
下一篇: CancellationToken的使用
robot_???
博客等级 码龄8年 38粉丝 56原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值