dev*_*os1 10 .net wpf ilmerge .net-4.0
对于我的生活,我似乎无法让我的.NET 4应用程序与ILMerge正确合并.即使在设置/ targetplatform,/ lib,/ ndebug 并添加自定义ILMerge.exe.config文件之后,输出文件也无法正常工作(它似乎无法"找到"合并的库).
我试过这个,这无济于事.除非我使用配置文件,否则我甚至无法构建它,但是当我这样做时它不起作用.没有配置文件,我一直收到错误消息" 不允许未解析的程序集引用:PresentationFramework ".
以下是我的ILMerge命令用作后期构建事件的当前状态:
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"
Run Code Online (Sandbox Code Playgroud)
对我做错了什么的想法?
我在WPF中看到用于组合.dll的一个建议是简单地将dll作为项目的嵌入资源添加,然后以编程方式将dll加载到程序集中.
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);
}
};
Run Code Online (Sandbox Code Playgroud)
请参阅:http: //blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx
你可以试试Costura.
https://github.com/Fody/Costura#how-it-works
它基本上需要Jeffrey Richters的评论
但它是否以一种你不需要编写任何代码的方式.即你不需要编写"AssemblyResolve"方法
我通过电子邮件向ILMerge的作者Mike Barnett发送电子邮件,他解释说它根本不适合与WPF应用程序一起使用,当我告诉他我使用WPF 3.5应用程序时,我很惊讶.由于它并没有得到真正的支持,我现在就把它写下来,等待另一种替代方案展现自己.
作为旁注,我确实从Eziriz尝试了.NET Reactor ,它实际上运行得很好,但是花费180美元,对于一个我不太愿意花费的爱好项目.但这比Red Gate的其他商业替代品便宜很多,所以我想提到它.
更新: Mike Barnett现在认为这个问题的接受答案是最佳解决方案.据他说,如果他知道这是可能的,他从来没有写过ILMerge.
虽然ILMerge确实不更新WPF资源字符串,但它可以用于通过将引用程序集目录而不是运行时目录传递给WPF引用来合并程序集/targetplatform,如下所示:( /targetplatform:v4,"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client"对于.NET 4.0客户端配置文件).
我使用它来合并Rx的System.Reactive.dll,它有一个引用Dispatcher,但没有任何实际的WPF资源.
| 归档时间: |
|
| 查看次数: |
9462 次 |
| 最近记录: |