servicestack,C#,Assemblies,Exe,Ilmerge,servicestack" /> servicestack,C#,Assemblies,Exe,Ilmerge,servicestack" />

C# 如何将多个程序集合并为一个?

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); 我应该怎么做才能将所有这些

我使用EXE项目(azure应用程序的启动任务)使用我的服务堆栈,因为我已将以下服务堆栈的DLL和一些azure的DLL复制到EXE项目中

当我构建此EXE项目时,Azure DLL将与我的EXE绑定,但服务堆栈的DLL不会与EXE绑定,因为要在任何计算机上运行我的EXE,我需要手动复制所有服务堆栈的DLL

我已使用此服务堆栈的dll来使用

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运行时
试试看。 它是一个基于GUI的
Ilmerge
,避免了所有的命令行工作。

检查该项目,该项目展示了如何将Ilmerge ServiceStack合并到单个跨平台.exe中的几个示例

ServiceStack还包括许多其他功能,这些功能特别适合创建嵌入式应用程序,其中:

  • 允许您的服务使用.NET的HTTP侦听器自托管
  • 支持预编译的Razor视图
  • 支持嵌入式资源
  • 支持Sqlite和OrmLite中的嵌入式数据库
  • 可以合并到单个.exe中

将引用的程序集作为嵌入式资源包括在内的一个很好的工具是(外接程序)。作者Simon Kropp将其描述如下:

[…]两种方法的组合:

  • 杰弗里·里克特的建议
  • 埃纳尔·艾格尔森的建议
结果是一个超级简单的解决方案,只需要从NuGet获取

特点:

  • 包括调试符号
  • 嵌入式组件的压缩
  • 包括/不包括特定组件
  • 其他(见附件)

如果您有WPF依赖项,您的选择可能会更加有限。。。。。ILMerge似乎无法处理这些问题。Fody(正如上面Codefox所提到的)对我们来说工作得很好,但是花了大约5分钟的时间开始工作。。。非常好的经历

使用Nuget安装(在Package Manager控制台中选择正确的默认项目)

它合并所有标记为“Copy Local”=true的DLL,并生成一个合并的.EXE(与标准输出一起,其中大部分现在不需要),该文件也被压缩。然后可以单独使用

许可证是MIT的,因此您可以根据需要修改/分发


.net core 3在项目配置中引入了两个新选项,称为单文件发布和修剪

您可以在此处找到有关文档、项目配置的更多详细信息,以供参考

  • 项目配置:
  • 
    win10-x64
    真的
    真的
    
  • 使用CLI:
  • 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