2

我有一个 C# 库,其中包含我们开发的一些程序集和一些第三方 o 我需要将所有内容放在一个程序集文件中。

当我尝试使用 ILMerge合并所有内容时,出现以下错误:

合并时发生异常:

ILMerge.Merge:程序集“TestLibrary”未标记为仅包含托管代码。(考虑使用 /zeroPeKind 选项——但请先阅读文档!) em ILMerging.ILMerge.Merge() em ILMerging.ILMerge.Main(String[] args)

当我从合并中删除 TestLibrary 时,它工作正常。但是为了让我的项目正常工作,我已经单独引用了 TestLibrary 并启用了 useLegacyV2RuntimeActivationPolicy="true"。

因此,经过更多研究后,我决定尝试使用Jeffrey Richter使用 Embedded Resources :

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 库。

4

1 回答 1

2

ILMerge 根本无法处理包含本机代码的程序集。您必须在使用前在运行时提取 dll,或者发送 dll。这也在ILMerge 使用 2 个第三方 dll 的 C++ 进行了解释

于 2012-11-07T19:35:20.253 回答