【发布时间】:2018-04-03 08:44:53
【问题描述】:
我有以下工具:
- Visual Studio 2017
- ILMerge 2.14.1208
- NuGet.CommandLine 4.5.1
- .NET Framework 4.0
我有一个名为 Common.dll 和 MyProject.dll 的公共库,它依赖于 Common.dll 和其他名为 Lib1.dll 和 Lib2.dll 的附加 DLL,它们反过来也依赖于 Common.dll。
现在我需要将所有 DLL 合并到一个 MyProject.dll 中,但要内化所有依赖项,因此我按顺序完成了以下操作:
ilmerge /log:log.txt /out:Common.dll Common.dll Lib1.dll Lib2.dll
然后
ilmerge /log:log.txt /out:MyProject.dll Common.dll /internalize
到目前为止,如果我通过在消费代码中浏览文件位置来包含 MyProject.dll 作为参考,没有问题,它工作得很好,但是如果我尝试打包到一个 nuget 存储库(本地或远程) ,
nuget pack MyProject.nuspec
现在,一旦我在消费代码中安装 NuGet 包,就会引发异常 System.IO.FileNotFoundException 说它是 Could not load file or assembly 'Common.dll
我哪里错了?
编辑:
这是我的 MyProject.nuspec MyProject.nuspec 文件:
<?xml version="1.0"?>
<package >
<metadata>
<id>MyProject</id>
<version>1.0.1.0</version>
<authors>Author</authors>
<owners></owners>
<description>
This is a description
</description>
<copyright>Copyright 2017</copyright>
</metadata>
</package>
【问题讨论】:
-
你的 .nuspec 里面有什么?生成的 .nupkg 里面有什么?我猜测非 ILMerged MyProject.dll 出于某种原因被添加到 .nupkg 中。
-
感谢您的回复。我在帖子中的 .nuspec 文件中添加了内容。在 lib/net40 的 .nupkg 中有一个 MyProject.dll 的合并版本。