C# 如何将多个程序集合并为一个?
我使用EXE项目(azure应用程序的启动任务)使用我的服务堆栈,因为我已将以下服务堆栈的DLL和一些azure的DLL复制到EXE项目中 当我构建此EXE项目时,Azure DLL将与我的EXE绑定,但服务堆栈的DLL不会与EXE绑定,因为要在任何计算机上运行我的EXE,我需要手动复制所有服务堆栈的DLL 我已使用此服务堆栈的dll来使用C# 如何将多个程序集合并为一个?,c#,assemblies,exe,ilmerge,
servicestack,C#,Assemblies,Exe,Ilmerge,
servicestack,我使用EXE项目(azure应用程序的启动任务)使用我的服务堆栈,因为我已将以下服务堆栈的DLL和一些azure的DLL复制到EXE项目中 当我构建此EXE项目时,Azure DLL将与我的EXE绑定,但服务堆栈的DLL不会与EXE绑定,因为要在任何计算机上运行我的EXE,我需要手动复制所有服务堆栈的DLL 我已使用此服务堆栈的dll来使用 JsonServiceClient client = new JsonServiceClient(servicepath); 我应该怎么做才能将所有这些
JsonServiceClient client = new JsonServiceClient(servicepath);
我应该怎么做才能将所有这些DLL捆绑到我的EXE中?您正在寻找的工具被称为。 它是一个命令行工具,可以这样使用:
ilmerge /target:winexe /out:MyApp.exe
MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll ServiceStack.Text.dll
还有一篇文章介绍了如何将ILMerge包含到VS项目设置中您有几个选项:
- 使用(免费)
如何看和
- 使用一些工具,如(商业)
它可以嵌入和合并其他内容(无需更改源代码)
- (免费但最少的源代码更改)
将所有需要的依赖项标记为“嵌入式资源”-这样它们就包含在EXE文件中。。。您需要设置一个处理程序,该处理程序在运行时读取资源并将所需的DLL返回到.NET运行时
Ilmerge
,避免了所有的命令行工作。检查该项目,该项目展示了如何将Ilmerge ServiceStack合并到单个跨平台.exe中的几个示例
ServiceStack还包括许多其他功能,这些功能特别适合创建嵌入式应用程序,其中:
- 允许您的服务使用.NET的HTTP侦听器自托管
- 支持预编译的Razor视图
- 支持嵌入式资源
- 支持Sqlite和OrmLite中的嵌入式数据库
- 可以合并到单个.exe中
- 杰弗里·里克特的建议
- 埃纳尔·艾格尔森的建议
- 包括调试符号
- 嵌入式组件的压缩
- 包括/不包括特定组件
- 其他(见附件)
.net core 3在项目配置中引入了两个新选项,称为单文件发布和修剪 您可以在此处找到有关文档、项目配置的更多详细信息,以供参考
win10-x64
真的
真的
dotnet发布-r win10-x64-p:PublishSingleFile=true
dotnetpublish-r-c发布
完全支持将这两个选项组合在一起,为您的应用程序生成修剪过的单个程序集。感谢您提醒我Jeffrey Richter的嵌入程序集解决方案!请参阅我的答案中提到的结合了注入必要代码的工具。OMG Costura.Fody是正确的答案。从nuget安装了软件包,重建了项目,现在我有了一个独立的EXE真棒!!我不敢相信这有多容易。只需安装nuget的软件包,您的工作就完成了。我也在使用Costura.Fody。设置起来很简单,将NuGet包作为资源也很容易。获取项目。@user3700562,此技术不会创建新程序集,而是将一个或多个引用的程序集嵌入到现有程序集中。这是一个很好的解决方案!我用了一年,没有问题。但请注意,它只包括顶级项目引用的程序集。如果你的应用引用了另一个引用了第三方程序集的项目,你需要将它添加到你的顶级项目中。太棒了!对我来说太棒了!Codeplex正在关闭,下面是移动的项目链接:您好,我可以将外部资源(文件/图像)添加到可执行文件中吗?@EmdadulSawon也许您可以将它们作为资源包含在其中一个LIB中?这不会给您提供单一程序集。它只是将您的文件压缩到zip存档中,然后在您尝试运行应用程序时将其解压缩到用户文件夹中。
<PropertyGroup>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
dotnet publish -r win10-x64 -p:PublishSingleFile=true
dotnet publish -r <rid> -c Release