代码之家  ›  专栏  ›  技术社区  ›  devios1

ILMerge和.NET 4.0出现严重问题

  •  10
  • devios1  · 技术社区  · 14 年前

    就我的一生而言,我似乎无法使我的.NET4应用程序与ILMerge正确合并。即使设置了/targetplatform、/lib、/ndebug

    我试过了 this this 无济于事。我甚至不能让它生成,除非我使用配置文件,但当我这样做时,它不工作。如果没有配置文件,我始终会收到错误消息“ ".

    ilmerge.exe /out:C:\Users\Logan\Development\Projects\OrangeNote\OrangeNote\bin\Release\OrangeNote.exe 
      /ndebug /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 
      /lib:"C:\Windows\Microsoft.NET\Framework\v4.0.30319" 
      /lib:"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies" 
      "C:\Users\Logan\Development\Projects\OrangeNote\OrangeNote\obj\Release\OrangeNote.exe" 
      "C:\Users\Logan\Development\Projects\OrangeNote\OrangeNote\..\..\..\Libraries\Lucene.Net\src\Lucene.Net\bin\Release\Lucene.Net.dll" 
      "C:\Users\Logan\Development\Projects\OrangeNote\OrangeNote\..\..\..\Libraries\Ookii.Dialogs\src\Ookii.Dialogs.Wpf\bin\Release\Ookii.Dialogs.Wpf.dll" 
      "C:\Users\Logan\Development\Projects\OrangeNote\OrangeNote\..\..\..\Libraries\SharpZipLib\bin\ICSharpCode.SharpZipLib.dll" 
      "C:\Users\Logan\Documents\Visual Studio 2010\Projects\HumanInterfaceProject\HumanInterfaceProject\bin\Release\HipLib.dll"
    

    有没有想过我做错了什么??

    5 回复  |  直到 14 年前
        1
  •  8
  •   Rob    14 年前

    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);
    
       }
    
    };
    

    请参见: http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

        2
  •  8
  •   Simon Randy Burden    11 年前
        3
  •  7
  •   devios1    14 年前

    Eziriz

    迈克·巴内特现在认为这个问题的公认答案是最好的解决方案。据他所说,如果他知道这是可能的,他一开始就不会写伊尔梅格。

        4
  •  6
  •   Stephen Cleary    14 年前

    通过将引用程序集目录而不是运行时目录传递给 /targetplatform ,因此: /targetplatform:v4,"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client" (对于.NET 4.0客户端配置文件)。

    我用它来合并Rx的System.Reactive.dll,它引用了 Dispatcher ,但没有任何实际的WPF资源。

        5
  •  3
  •   Community CDub    8 年前

    我注意到您的程序集中有一个叫做“dialogs.wpf”。当前ILMerge不能正确地将程序集与其中的WPF资源合并。

    关于这个的信息不多,但是 this forum post 提到了一个可能的解决方案,并且在上面提到了几种可能性 answers to this question ,但投票率最高的建议只是买一个商业替代品——我不知道这对你是否有可能。

    有一个 discussion here here that changing the resource reference in the xaml may help solve the problem .