2

我有一个 .NET 4.0 解决方案,其中包含大约 10 个项目,我在 Ubuntu Desktop 12.04 上的 mono 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)

如有必要,我很乐意提供更多信息。

4

2 回答 2

2

mkbundle 用于创建独立的二进制文件,而不是将多个库合并为一个。

你想要像il-merge这样的东西。

于 2012-06-19T23:21:54.670 回答
2

mkbundle不是 IL 合并。该工具的输出是一个独立的应用程序(有或没有单声道本身)。因此,其他 .NET 项目不再可以使用它。

允许您mkbundle分发包含执行单个 .NET 应用程序所需的所有内容的单个文件。

您正在寻找的是一种将多个程序集合并为一个新程序集的方法。微软有这样的工具,而其他一些产品(许多基于 Mono.Cecil)也有类似的功能。

于 2012-06-19T23:23:12.920 回答