情景:用c#wpf寫DALSA線掃相機的項目,生成時不報錯,運行到DALSA相關的代碼就報錯找不到dll(DALSA的技術支持沒給到任何支持 )
一.根據框架選擇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>
三.還是報錯的其他原因
寫了個DALSAHelper項目,其中有個類,叫DALSALineScanHelper。
在另一個項目中,引用了DALSAHelper項目,并且new了個DALSALineScanHelper。
當我把new放在函數外面時就報錯找不到dll:
修改后(把new代碼放到函數里、調用前),不再報錯:
解決方法:把new代碼放到函數里、調用前。
但是我新建了個項目測試,一模一樣的代碼,把new放在外面也沒有報錯,這個異常出現的原因未知。