【发布时间】:2019-06-03 14:08:42
【问题描述】:
我正在学习 NuGet。我确信这不是一项罕见的任务。我有一些本机 dll 需要添加到最终输出中。总共有25个dll,但只有7个可以直接添加为引用。
我目前有一个 NuGet 包,它使用以下结构直接添加 7 个引用:
build
x64
reference1.dll
...
reference7.dll
TheOthers1.dll
...
TheOthers20.dll
MyPackage.targets
lib
net472
reference1.dll
reference2.dll
reference3.dll
reference4.dll
reference5.dll
reference6.dll
reference7.dll
我的目标文件如下所示:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<NativeLibs Include="$(MSBuildThisFileDirectory)**\*.dll" />
<None Include="@(NativeLibs)">
<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
我的项目输出最终看起来像这样:
bin/Debug
Reference1.dll
...
Reference7.dll
x64
reference1.dll
...
reference7.dll
TheOthers1.dll
...
TheOthers20.dll
当我运行应用程序时,我得到:
System.IO.FileNotFoundException:'无法加载文件或程序集'reference1.dll'或其依赖项之一。找不到指定的模块。'
如果我将 x64 文件夹中的 dll 手动复制到应用程序运行的 bin/Debug 文件夹中。
如何构建 .targets 文件以将 build/x64 中的所有 dll 复制到 bin/Debug 或 bin/release 中?
【问题讨论】:
-
你有没有试过查看一个也有本机程序集的包,也许是 sqlite,看看他们是如何做到的?
-
@zivkan - 哇...SQLite 发生了很多我不明白的事情。根据我有限的知识,SQLite.Interop.dll 就像我的 dll 一样被复制到 x64 文件夹中。当应用程序需要 SQLite.Interop.dll 而不是 bin/Debug 时,是否有什么东西可以告诉应用程序在 x64 文件夹中查找 SQLite.Interop.dll?就我而言,我的文件也在那里,但应用程序似乎找不到它们。