Aru*_*ana 82 c# ilmerge assemblies exe servicestack
我使用EXE项目(azure应用程序的启动任务)使用我的服务堆栈,因为我已将以下服务堆栈的DLL和一些Azure的DLL复制到EXE项目中.
当我构建这个EXE项目时,Azure DLL将与我的EXE捆绑在一起但服务堆栈的DLL不会与EXE捆绑在一起,因为要在任何机器上运行我的EXE,我需要手动复制所有服务堆栈的DLL.
我已经使用了这个服务栈的dll来使用
JsonServiceClient client = new JsonServiceClient(servicepath);
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能将所有这些DLL捆绑到我的EXE中?
Yah*_*hia 117
你有几个选择:
要么
要么
AssemblyResolve
处理程序,它在运行时从资源中读取并将所需的DLL返回给.NET运行时...yas*_*891 29
您正在寻找的工具称为ILMerge.它是一个命令行工具,可以像这样使用:
ilmerge /target:winexe /out:MyApp.exe
MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll ServiceStack.Text.dll
Run Code Online (Sandbox Code Playgroud)
还有一篇文章介绍了如何在此处将ILMerge包含到VS项目设置中
Cod*_*Fox 23
将引用的程序集包含为嵌入式资源的一个很棒的工具是Costura(一个Fody插件).作者Simon Kropp将其描述如下:
[...]两种方法的组合:
- Jeffrey Richter建议使用嵌入式资源作为合并程序集的方法
- Einar Egilsson建议使用cecil创建模块初始化器
结果是一个超级简单的解决方案,只需要从NuGet 获取Costura.Fody.
特征:
如果您有 WPF 依赖项,您的选择可能会受到更多限制...ILMerge 似乎无法处理这些问题。Costura.Fody(正如 Codefox 上面提到的)对我们来说非常完美,花了大约 5 分钟才能开始......这是一次非常好的体验。
使用 Nuget 安装(在包管理器控制台中选择正确的默认项目)。
它合并所有标记为“Copy Local”= true 的 DLL,并生成一个合并的 .EXE(与标准输出一起,其中大部分现在不再需要),该文件也被压缩。然后可以独立使用。
该许可证是 MIT 的,因此您可以根据需要修改/分发。
https://github.com/Fody/Costura/
.net core 3 在项目配置中引入了两个新选项,称为单文件发布和修剪。
您可以在此处找到有关文档的更多详细信息,在此处复制项目配置以供参考。
<PropertyGroup>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
dotnet publish -r win10-x64 -p:PublishSingleFile=true
dotnet publish -r <rid> -c Release
Run Code Online (Sandbox Code Playgroud)
完全支持将这两个选项组合在一起,以获得适合您的应用的修剪后的单个组件。
归档时间: |
|
查看次数: |
78101 次 |
最近记录: |