我的 WPF 应用程序有这样的输出文件:
de\
es\
fr\
hu\
it\
pt-BR\
Resources\
ro\
ru\
sv\
zh-Hans\
FileHelpers.dll
FileHelpers.DataLink.dll
FileHelpers.ExcelStorage.dll
Interop.Excel.dll
Interop.Office.dll
Ionic.Zip.dll
wpftoolkit.dll
Xceed.Wpf.AvalonDock.dll
Xceed.Wpf.AvalonDock.Themes.Aero.dll
Xceed.Wpf.AvalonDock.Themes.Metro.dll
Xceed.Wpf.AvalonDock.Themes.VS2010.dll
Xceed.Wpf.DataGrid.dll
Xceed.Wpf.Toolkit.dll
MyApp.Common.Extensions.dll
MyApp.Common.Helpers.dll
MyApp.Common.Types.Attributes.dll
MyApp.Security.dll
MyApp.Wpf.Controls.dll
MyApp.exe
MyApp.exe.config
licence.key
error.log
一切都从MyApp
是我自己开发的,其他都是3dParty做的
我想分发我的应用程序,但为了做到这一点,我想合并所有可能的内容,以分发最小数量的文件。
我试图使用 ilmerge 将我的文件合并为一个文件,但出现错误:
ILMerge.Merge: ERROR!!: Duplicate type 'XamlGeneratedNamespace.GeneratedInternal
TypeHelper' found in assembly 'Xceed.Wpf.DataGrid'.
我在这里找到了这个问题的答案xeed错误原因 http://xceed.com/CS/forums/thread/33259.aspx比我一直在读书消除限制 http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx and 装配作为资源作者:Jeffrey Richter http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx
所以我发现 Jeffrey Richter 的解决方案非常有用。但我无法将其应用于我的程序,因为程序集上没有“构建操作”属性。
我可以做些什么来实现我的目标吗?
为了使 Jeffrey 的想法发挥作用,您不仅应该添加程序集作为参考。只需将 dll 添加为现有项目(右键单击项目 -> 添加 -> 现有项目)到你的项目中,你就会得到构建行动他们身上的财产。还设置了复制本地财产给false关于您添加为嵌入资源的引用。
App类构造函数:
public partial class App : Application
{
public App()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var dllName = new AssemblyName(args.Name).Name + ".dll";
var execAsm = Assembly.GetExecutingAssembly();
var resourceName = execAsm.GetManifestResourceNames().FirstOrDefault(s => s.EndsWith(dllName));
if (resourceName == null) return null;
using (var stream = execAsm.GetManifestResourceStream(resourceName))
{
var assbebmlyBytes = new byte[stream.Length];
stream.Read(assbebmlyBytes, 0, assbebmlyBytes.Length);
return Assembly.Load(assbebmlyBytes);
}
}
}
请注意,此方法比通常的 dll 加载消耗更多的内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)