如何添加外部本机依赖dll

本文关键字:外部 本机 依赖 dll 添加 何添加 | 更新日期: 2023-09-27 18:12:24

我有两个项目。第一个是Windows窗体应用程序项目,第二个是类库项目。Сlass库项目与FANN一起工作。Windows窗体是启动项目。

我应该有Fann.Net.dll和fanndoublet.dll与FANN一起工作。我下载了这些库,并将它们放在lib文件夹中,位于解决方案的根目录。

我将Fann.Net.dll作为外部dll添加到类库项目中。我编译了这个项目。我得到一个错误,说"无法加载DLL ' fanndoublet . DLL '。我通过将fanndoublet .dll添加到文件夹Windows_Forms_Application'bin'Debug来修复此错误。

我认为这是一个糟糕的解决方案,因为我使用的是git,每次你都需要将dll转移到新工作场所的这个文件夹。

真诚,丹尼斯。

如何添加外部本机依赖dll

你可以试试:

  1. 添加/现有条目,而不是添加参考。
  2. 使用Add As Link.
  3. 确保项目将被复制到构建文件夹中。在VS中的库属性中,将Build Action设置为Content,并将Copy到Output Directory设置为Copy if Newer。
  4. 。重建和测试。

链接建议http://social.msdn.microsoft.com/Forums/en-US/1b1b316a-8648-4243-a651-84de51fd2508/reference-native-dll-from-managed-c-project?forum=vssmartdevicesvbcs

您可以添加本地dll作为链接项,并使用"Copy if newer"。
原生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意思是"如果更新就复制"

梁编写的上述解决方案仅适用于平面工程结构!你可能想把你的解决方案中的所有dll组织到一个名为"dependencies"的文件夹中。但是要注意,文件是相对于解决方案资源管理器中的项目结构进行复制的。(使用Visual Studio 2015测试)

  1. 在解决方案资源管理器中创建文件夹依赖项
  2. 添加/现有条目,而不是添加参考。
  3. 使用Add As Link.
  4. 在VS的库属性中,将Build Action设置为Content,并将Copy到Output Directory以Copy if Newer.
现在你应该有如下的解决方案资源管理器结构:
Your Project
- class1.cs
- Dependencies'Fann.Net.dll
- Dependencies'fanndoubleMT.dll

添加post - build步骤:

xcopy "$(TargetDir)'Dependencies" "$(TargetDir)"  /s /e /h /Y

此解决方案将添加文件到项目和创建构建后步骤相结合,具有以下优点:

  • 项目组织良好
  • 如果有人在解决方案资源管理器中添加了新的依赖项,则无需修改构建后步骤,
  • 如果您使用subversion,它将重置存储库中锁定文件的只读标志

无法向非托管dll '添加引用'。一种解决方案是在Windows窗体项目中添加构建后事件。xcopy .'lib' fanndoublet .dll $(TargetPath)构建后事件还可以执行.cmd或.bat文件

您仍然需要托管程序集的引用'Fann.Net.dll'

如果dll不在项目bin文件中,您应该允许复制dll。

  1. 右键单击dll

  2. 单击"属性"

  3. 如果Copy to Output Directory为Do not Copy ,则选择Copy always

  4. 重建项目。

在我的例子中,我必须单击程序集选项卡中的浏览按钮来查找我的dll。

    右键单击你的项目
  1. 选择添加,然后选择引用…
  2. 在参考管理器窗口中单击Browse…(位于底部)。
  3. 找到你的。dll然后按Add。