我有一个C#库,包含我们开发的一些程序集和一些第三方o我需要将所有内容放在一个程序集文件中。
当我尝试使用ILMerge 合并时,我收到以下错误:
合并期间发生异常:
ILMerge.Merge:程序集“TestLibrary”未标记为 仅包含托管代码。 (考虑使用/ zeroPeKind选项 - 但请先阅读文档!) em ILMerging.ILMerge.Merge() em ILMerging.ILMerge.Main(String [] args)
当我从Merge中删除TestLibrary时,它运行正常。但为了让我的项目有效,我已经单独引用了TestLibrary并启用了useLegacyV2RuntimeActivationPolicy =“true”。
因此,经过一番研究后,我决定尝试使用Jeffrey Richter:
来使用嵌入式资源AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
String resourceName = "AssemblyLoadingAndReflection." +
new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
它加载资源字节但在Assembly.Load上失败,说程序的格式不正确。
TestLibrary是一个C ++ .Net v1.0库。
答案 0 :(得分:2)
ILMerge根本无法处理包含本机代码的程序集。您必须在使用前在运行时提取dll,或者运送dll。这也在ILMerge using 2 third party dll's C++
中解释