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

时间:2012-06-19 23:02:39

标签: c# mono ubuntu-12.04 mkbundle

我有一个.NET 4.0解决方案,包含大约10个项目,我在Ubuntu Desktop 12.04上的单声道2.10.8.1上成功编译,该程序在VM中运行。

我正在尝试运行mkbundle将所有10个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)

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

您正在寻找的是将多个装配合并到新装配中的方法。微软有这样一个工具和一些其他产品(许多基于Mono.Cecil)做类似的事情。