mkbundle 组合的 DLL 在其他项目中引用时会导致元数据无效异常



我有一个 .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)也做类似的事情。

最新更新