gpt4 book ai didi

c# - 如何将文件合并为单个可执行文件或减少分发文件的数量

转载 作者:太空狗 更新时间:2023-10-30 00:25:02 25 4
gpt4 key购买 nike

我的 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:错误!!:重复类型 'XamlGeneratedNamespace.GeneratedInternal
在程序集“Xceed.Wpf.DataGrid”中找到 TypeHelper。
我在这里找到了这个问题的答案 xeed error reason比我正在阅读 ilmerge limitationsassembly as resources by Jeffrey Richter

所以我发现 Jeffrey Richter 的解决方案非常有用。但我无法将其应用于我的程序,因为程序集上没有“Build Action”属性。

我可以做些什么来实现我的目标?

enter image description here

最佳答案

要使 Jeffrey 的想法生效,您应该添加您的程序集,而不仅仅是作为引用。只需将 dll 作为现有项添加(右键单击项目-> 添加-> 现有项)到您的项目中,您将获得它们的 Build Action 属性。同时将添加为嵌入资源的引用的Copy local 属性设置为false

enter image description here

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加载消耗更多的内存。

关于c# - 如何将文件合并为单个可执行文件或减少分发文件的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19735459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com