我有图形用户界面c#项目,其中有几个额外的软件包在参考。我希望在构建输出中没有任何额外的dll的可执行文件。为此,我尝试使用来自nuget的ILMerge包。我刚刚使用以下命令安装了软件包:
Install-Package ilmerge -Version 3.0.18但是我得到了同样的需要动态链接库的可执行文件。为了让ILMerge包构建合并的可执行文件,我应该在我的项目中做一些配置吗?
发布于 2018-11-12 01:33:33
我可以向你提出另一种解决方法,它不需要任何nuget包,只需要一些代码:
你应该在你的应用程序的入口点中将项目的所有引用都添加为Embeded Resources.
AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;私有程序集OnAssemblyResolve(对象发送器,ResolveEventArgs参数){ var assemblyName = args.Name.Substring(0,args.Name.IndexOf(','));var程序集=基于assemblyName的嵌入式资源的...load二进制文件...返回程序集(Assembly.Load);}
收益:没有额外的套餐。易于使用和调试。
关注点:如果你有很多外部包,很难维护。需要手动将它们添加到Embeded Resources。
https://stackoverflow.com/questions/53251057
复制相似问题