配置ILMerge程序包

时间:2018-11-11 16:58:50

标签: c# nuget ilmerge

我有GUI c#项目,在参考中有几个其他软件包。我想要在生成输出中没有任何其他dll的可执行文件。为此,我正在尝试使用ILMerge中的nuget软件包。我刚刚使用以下命令安装了软件包:

Install-Package ilmerge -Version 3.0.18

但是结果是我得到了需要dll的可执行文件。我应该在项目中进行任何配置以使ILMerge软件包生成合并可执行文件吗?

1 个答案:

答案 0 :(得分:1)

我可以向您建议另一个解决方法,该方法无需任何nuget程序包,而仅需要一些代码即可:

  1. 您应将项目的所有引用添加为“嵌入资源”。
  2. 在您的应用入口点之后,您应该执行以下操作:

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

利润:没有其他奖励。易于使用和调试。

关注点:如果您有很多外部软件包,则很难维护。需要将它们手动添加到“嵌入资源”中。