【问题标题】:NuGet pack after ILMerge is not able to resolve dependencesILMerge 后的 NuGet 包无法解决依赖关系
【发布时间】:2018-04-03 08:44:53
【问题描述】:

我有以下工具:

  • Visual Studio 2017
  • ILMerge 2.14.1208
  • NuGet.CommandLine 4.5.1
  • .NET Framework 4.0

我有一个名为 Common.dllMyProject.dll 的公共库,它依赖于 Common.dll 和其他名为 Lib1.dllLib2.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 的合并版本。

标签: c# dll nuget pack ilmerge


【解决方案1】:

确保从 Common.dll 程序集中没有按名称请求任何程序集,如 Type.GetType("Lib1", "Lib1.ClassName") 如果有,请在合并操作之前更改为 Type.GetType("Lib1.ClassName")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 2017-02-20
    • 2012-08-07
    • 1970-01-01
    相关资源
    最近更新 更多