我有GUI c#项目,在参考中有几个其他软件包。我想要在生成输出中没有任何其他dll的可执行文件。为此,我正在尝试使用ILMerge
中的nuget
软件包。我刚刚使用以下命令安装了软件包:
Install-Package ilmerge -Version 3.0.18
但是结果是我得到了需要dll的可执行文件。我应该在项目中进行任何配置以使ILMerge
软件包生成合并可执行文件吗?
答案 0 :(得分:1)
我可以向您建议另一个解决方法,该方法无需任何nuget程序包,而仅需要一些代码即可:
在您的应用入口点之后,您应该执行以下操作:
AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
private Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
{
var assemblyName = args.Name.Substring(0, args.Name.IndexOf(','));
var assembly = ...load binary from embeded resources as you wish based on assemblyName...
return Assembly.Load(assembly);
}
利润:没有其他奖励。易于使用和调试。
关注点:如果您有很多外部软件包,则很难维护。需要将它们手动添加到“嵌入资源”中。