在.NET v4 + Assembly上嵌入\合并.NET v1程序集

时间:2012-11-07 19:08:18

标签: c# ilmerge

我有一个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库。

1 个答案:

答案 0 :(得分:2)

ILMerge根本无法处理包含本机代码的程序集。您必须在使用前在运行时提取dll,或者运送dll。这也在ILMerge using 2 third party dll's C++

中解释