我有两个项目。第一个是Windows窗体应用程序项目,第二个是类库项目。 Сlass库项目与FANN一起使用。 Windows窗体是启动项目。
我应该Fann.Net.dll and fanndoubleMT.dll与FANN合作。我下载了这些库并将它们放在解决方案根目录中的 lib 文件夹中。
我将Fann.Net.dll作为外部dll添加到类库项目中。我编译了这个项目。我收到一条错误,上面写着“无法加载DLL'fanndoubleMT.dll'。我通过将fanndoubleMT.dll添加到文件夹Windows_Forms_Application \ bin \ Debug修复此错误。
我认为这是一个可怕的解决方案,因为我使用git,每次你需要将dll转移到新工作区的这个文件夹。
真诚的,丹尼斯。
答案 0 :(得分:34)
你可以试试这个:
答案 1 :(得分:6)
您可以将原生dll添加为链接项,并使用“复制如果更新”。
本机dll的问题在于,有时您会根据项目的配置(调试/发布或平台)使用不同的dll。
您可以编辑项目的.csproj并有条件地链接本机dll:
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' ">
<Content Include="..\..\..\..\..\bin\Win32\Release\fanndoubleMT.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' ">
<Content Include="..\..\..\..\..\bin\Win32\Debug\fanndoubleMT_d.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<Content Include="..\..\..\..\..\bin\x64\Debug\fanndoubleMT_d.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<Content Include="..\..\..\..\..\bin\x64\Release\fanndoubleMT.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
请注意,复制选项设置为 PreserveNewest ,这意味着“如果更新则复制”。
答案 2 :(得分:5)
您无法向非托管dll添加“引用”。 一种解决方案是在Windows窗体项目中添加Post Build Event。 像:xcopy .. \ lib \ fanndoubleMT.dll $(TargetPath) post build事件也可以执行.cmd或.bat文件
您仍然需要对托管程序集的引用'Fann.Net.dll'
答案 3 :(得分:3)
liang编写的上述解决方案仅适用于平面项目结构!您可能希望将解决方案中的所有DLL组织到一个名为&#34; Dependecies&#34;的文件夹中。但请注意,文件在解决方案资源管理器中相对于项目结构进行了复制。 (使用Visual Studio 2015测试)
现在您应该拥有以下解决方案资源管理器结构:
Your Project
- class1.cs
- Dependencies\Fann.Net.dll
- Dependencies\fanndoubleMT.dll
添加postbuild步骤:
xcopy "$(TargetDir)\Dependencies" "$(TargetDir)" /s /e /h /Y
这种将文件添加到项目和创建后期构建步骤的解决方案具有以下优势:
答案 4 :(得分:0)
如果dll不在项目bin文件中,则应允许复制dll。
右键点击你的dll
点击属性
如果复制到输出目录为不复制,请选择始终复制
重建项目。它会出现。
答案 5 :(得分:-1)