C# 配置ILMerge包

C# 配置ILMerge包,c#,nuget,ilmerge,C#,Nuget,Ilmerge,我有一个GUI c#项目,它有几个附加的参考包。我想有没有任何额外的dll的在建输出的可执行文件。为此,我尝试使用numget中的ILMerge包。我刚刚用命令安装了软件包: Install-Package ilmerge -Version 3.0.18 但结果我得到了需要dll的可执行文件。我是否应该在我的项目中进行任何配置,以使ILMergepackage build merged可执行?我可以向您建议另一种解决方法,它不需要任何nuget包,只需要一些代码: 您应该将项目的所有引用添加为

我有一个GUI c#项目,它有几个附加的参考包。我想有没有任何额外的dll的在建输出的可执行文件。为此,我尝试使用
numget
中的
ILMerge
包。我刚刚用命令安装了软件包:

Install-Package ilmerge -Version 3.0.18

但结果我得到了需要dll的可执行文件。我是否应该在我的项目中进行任何配置,以使
ILMerge
package build merged可执行?

我可以向您建议另一种解决方法,它不需要任何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);
    }
    
  • 利润:没有额外的套餐。易于使用和调试


    问题:如果您有很多外部软件包,则很难进行维护。需要手动将它们添加到嵌入的资源中

    -相同的解决方案,但会自动将该代码添加到主入口点,并将包添加为嵌入式资源;)@ScottChamberlain我很确定,所有的ilmerge工具都是一样的,但我更喜欢控制所有的stemp,如果它不需要太多的成本的话。但是无论如何,感谢您的link=)ILMerge实际上修改了dll的原始代码,使其位于exe中。问题是它破坏了WPF的程序集名称之类的东西。您和我展示的资源解决方案没有重命名问题。我的评论只是一种自动化的方式。有趣的事实:ILMerge的作者曾经说过使用这种嵌入资源的方法“”