我有一个 .NET 4.0 解决方案,其中包含大约 10 个项目,我正在 Ubuntu Desktop 12.04 上的单声道 2.10.8.1 上成功编译这些项目,该项目在 VM 中运行。
我正在尝试运行 mkbundle 将所有 10 个 DLL 合并为一个 DLL,然后我可以在其他解决方案中引用该 DLL(即一些将在更高级别应用程序中大量重用的核心库)。
这是我为构建解决方案而运行的内容:
xbuild /nologo CoreApp.sln
然后我运行以下命令来组合 DLL:
mkbundle -c --nomain -o Build/CoreApp.dll Build/FirstLibrary.dll Build/SecondLibrary.dll Build/ThirdLibrary.dll
这成功完成,我得到 CoreApp.dll。
但是,当我尝试构建依赖解决方案时,出现以下异常:
Error CS0009: Metadata file `/home/user/project/Build/CoreApp.dll' does not contain valid metadata (CS0009) (HigherLevelApp.Impl)
如有必要,我很乐意提供更多信息。
mkbundle 用于创建独立的二进制文件,而不是将多个库合并为一个。
你想要像 il-merge 这样的东西。
mkbundle
不是IL合并。该工具的输出是一个独立的应用程序(有或没有单声道本身)。因此,其他 .NET 项目不再使用它。
mkbundle
允许您分发单个文件,其中包含执行单个 .NET 应用程序所需的一切。
您正在寻找一种将多个程序集合并到新程序集中的方法。Microsoft有这样的工具,其他一些产品(许多基于Mono.Cecil)也做类似的事情。