有没有办法让控制台应用程序仅使用 .NET Core 中的单个文件运行?

2024-06-28

在.NET框架中,您可以制作一个.EXE将从命令行运行的文件,无需任何额外的配置文件(如果使用 ILMerge,您可以将所有.DLL参考文献1.EXE集会)。

我正在尝试使用 .NET Core 来完成同样的事情,但到目前为止还没有成功。即使是最简单的Hello World没有依赖项的应用程序需要有一个名为<MyApp>.runtimeconfig.json为了运行使用dotnet.exe.

dotnet F:\temp\MyApp.dll

的内容<MyApp>.runtimeconfig.json如下面所述:

{
  "runtimeOptions": {
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "1.1.1"
    }
  }
}

如果没有此配置文件与.DLL,我收到以下错误:

A fatal error was encountered. The library 'hostpolicy.dll' required to
execute the application was not found in 'F:\temp'.

我的问题是:是否有某种方法可以更改应用程序,使其不会require此配置文件存在,以便此信息的默认值在.DLL但可以通过添加配置文件来覆盖吗?

注意:我还想确保它“正常工作”,无论安装在哪个平台上,前提是该平台具有正确的 .NET Core 版本。

背景

我试图获得运行一些有时有用但很少需要的实用程序的流畅用户体验。自从它似乎不可能使用相同的.DLL从客户端应用程序引用的 https://stackoverflow.com/questions/44830430/is-it-possible-to-make-the-same-dll-into-both-a-console-application-and-a-nuget作为控制台应用程序,下一个最好的事情就是拥有一个单个文件可以在没有任何依赖的情况下下载和运行。

例如,在 Java 中,您只需下载一个.jar在任何支持的平台上创建文件并运行:

java <package>.jar <namespace>.SomeClass [args]

它会“正常工作”,无需任何额外的文件。如何使用 .NET Core 获得类似的用户体验?

简而言之,我想尝试避免“首先解压缩到目录”的额外步骤......


2018 年更新:.NET Core 3.0 旨在实现一种新场景:将 .NET Core 运行时和所有应用程序依赖项打包到单个可执行文件中。

目前,还没有自动防故障方法来创建single可执行文件。由于涉及大量类型转发 dll 文件,即使是 ILMerge 和类似工具也可能无法产生正确的结果(尽管这可能会有所改善,但问题是这些场景尚未经过广泛的测试,尤其是在生产应用程序中)

目前有两种部署 .NET Core 应用程序的方法:

  • As a “便携式应用程序”/“依赖框架的应用程序” https://learn.microsoft.com/en-us/dotnet/core/deploying/#framework-dependent-deployments-fdd?WT.mc_id=DT-MVP-5002999,需要一个dotnet目标机器上的可执行文件和已安装的框架。在这里,XYZ.runtimeconfig.json用于确定要使用的框架版本并指定运行时参数。这种部署模型允许在各种平台(windows、linux、mac)上运行相同的代码
  • As a “独立的应用程序” https://learn.microsoft.com/en-us/dotnet/core/deploying/#self-contained-deployments-scd?WT.mc_id=DT-MVP-5002999:这里,整个运行时包含在已发布的输出中,并生成可执行文件(例如yourapp.exe)。此输出特定于平台(通过运行时标识符设置)并且只能在目标操作系统上运行。然而,生成的可执行文件只是一个小的填充程序,用于启动运行时并加载应用程序的主 dll 文件。这也允许XYZ.runtimeconfig.json设置其他运行时属性,例如垃圾收集设置。(将其视为“新”app.config file)

未来,CoreRT运行时 https://github.com/dotnet/corert– 在撰写本文时仍在开发中 – 旨在允许创建特定于运行时且不需要任何其他文件的单个预编译本机可执行文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法让控制台应用程序仅使用 .NET Core 中的单个文件运行? 的相关文章

  • 提高mmap memcpy文件读取性能

    我有一个从文件中顺序读取数据的应用程序 有些是直接从指向的指针读取mmaped 文件和其他部分是memcpyed 从文件到另一个缓冲区 我注意到在进行大型操作时性能不佳memcpy我需要的所有内存 1MB 块 以及在执行大量较小操作时的更好
  • Visual Studio - 更改类时自动刷新类视图

    我有 Java 背景 多年来一直在使用 Eclipse 使用 Visual Studio 2008 时我错过的一项功能是 当我更改类时 类视图不会自动刷新 在 Eclipse 中 它有一个 类 大纲 窗口 它代表当前类并显示方法 属性等 这
  • 如何终止从cin读取?

    我已经尝试了这里列出的一堆方法 但没有一个起作用 它总是在等待更多的输入 我试过了while std getline std cin line 和下面的方法 似乎没有任何作用 include
  • Qt:将事件发布到 QThread 的正确方法?

    在我的 Qt 应用程序中 我有一个主线程和一个工作线程 工作线程子类QThread并通过处理事件customEvent 这是主线程发送要由工作线程处理的事件的正确方法吗 QThread myWorkerThread QApplication
  • 使用 fork/execvp 和系统调用之间的区别

    使用 system 执行二进制文件与使用 fork execvp 组合执行二进制文件有什么区别 安全性 可移植性 性能方面是否存在差异 系统还使用了一个fork exec 组合 如果你这样做fork exec您自己可以与正在运行的进程并行执
  • 使用自定义源增强 Iostreams zlib_error

    我正在尝试使用zlib decompressor通过一个解压缩数据istreambuf iterator 我找不到使用输入迭代器作为流的输入的内置方法 如果已经存在 请指出一种方法 所以我写了这个源代码 template
  • SFINAE 在返回类型中工作,但不作为模板参数[重复]

    这个问题在这里已经有答案了 我已经使用过 SFINAE 习语很多次了 而且我习惯了把我的std enable if lt gt 在模板参数中而不是在返回类型中 然而 我遇到了一些微不足道的情况 它不起作用 我不知道为什么 首先 这是我的主要
  • 是否有合法的方法使用运算符 << 打印元组和对?

    我有一组模板 函数 允许我打印元组 对 假设元组 对中的每种类型都有operator lt lt 为其定义的 不幸的是 由于 17 4 3 1 添加我的内容是非法的operator lt lt 重载到std 有没有其他方法可以让 ADL 找
  • 在 ASP.NET MVC 3 Web 应用程序项目之间共享视图

    我有几个 ASP NET MVC 3 Web 应用程序 它们有很多通用对象 相同的登录控制器 他们的登录系统之间的一些差异体现在web config files 抬头 明细视图 发票 付款单 付款单等 为了减少代码的冗余 我将通用控制器和视
  • 从表达式创建动态 Linq select 子句

    假设我定义了以下变量 IQueryable
  • 字符集中字符的顺序

    是否通过标准保证字符的顺序 例如 我可以算出字符集表中 1 符号后面跟着 2 符号吗 或者它是特定于平台的 1999 年的 C 标准对字符集是这样规定的 基本源字符集和基本执行字符集都应具有以下成员 拉丁字母表中的 26 个大写字母 拉丁字
  • 如何在Linux上正确设置串行通信

    我正在尝试从 FPGA 板读取数据以及向 FPGA 板写入数据 该板本身附带一个驱动程序 每当板插入时 该驱动程序都会创建一个名为 ttyUSB0 的终端设备 在 FPGA 上 实现了异步接收器和发送器 并且它们似乎可以工作 然而 C 方面
  • C 中的 const 和指针

    将 const 与指针一起使用可能会导致指针对象无法通过使用相关指针取消引用来修改 但为什么我也不能修改指针不直接指向的内容呢 例如 int a 3 const int ptr a ptr 5 不会编译 但为什么 ptr 2 5 还编译不了
  • C# CsvHelper.ValidationException - 为什么?

    我正在尝试在 C 控制台应用程序中使用 CSVHelper 我有一个例外 CsvHelper ValidationException 标头匹配 Numer Dokumentu 未找到索引 0 处的名称 我不知道为什么 因为这个标题位于 cs
  • 如何在没有 ADO 包装器的情况下在 C# 中使用 SQLite

    这可能吗 我读过的所有文章都指出 ADO 包装器是必要的 但 SQLite 网站暗示除了 DLL 之外不需要其他任何东西 如果可能的话 我希望那里有代码示例 看这里 http www sqlite org cvstrac wiki p Sq
  • 为什么函数不能跟在 Main 之后

    为什么我不能在 main 之后放置一个函数 Visual Studio 无法构建程序 这是 C 怪癖还是 Visual Studio 怪癖 eg int main myFunction myFunction 会产生 main 无法使用 my
  • 如何在网络浏览器中打开 Excel?

    单击按钮时我需要在网络浏览器中打开 Excel 如何在 asp net 中执行此操作 您无法在客户端 浏览器 计算机上控制和启动软件 为什么 安全 如果这是可能的话 黑客早就接管了所有计算机 你能解释一下吗exactly你想做什么 如果您解
  • C# 中线程之间发送消息

    如何在线程之间发送和接收消息 例如 一种解决方案是共享并发队列 尽管它的名称 并发队列 http msdn microsoft com en us library dd267265 aspx 这将允许您将一个对象从一个线程入队 并让另一个线
  • 从 iso 货币符号获取 NativeEnglishName,而不依赖于登录用户的当前文化

    我所拥有的是货币IsoCode EUR 此属性也可以在 RegionInfo 类 gt ri ISOCurrencySymbol 但 RegionInfo 类取决于当前登录的用户 我想要的是获得像 Euro 这样的 NativeEnglis
  • 为什么禁止在后续私有派生类中简单提及基指针/引用?

    struct B struct D private B B fun return new D ok struct DD public D B foo return 0 error struct B B B is inaccessible 这

随机推荐

  • Flexslider 在循环后停在第一张幻灯片处

    我试图让 Flexslider 进行完整循环 然后在返回到第一张幻灯片后停止或暂停 到目前为止 这是我的代码 window load function flexslider flexslider animation slide animat
  • 打印字符串有困难

    当我运行该程序时 第二个printf prints string2与扫描到的任何内容string1附在最后 e g 123被扫描到string1然后它打印 Is before 12ab123 相对于12ab 为什么不只是 12ab char
  • 测试舵图模板

    有没有办法测试模板是否适用于所有可能的值 注意 这与 helm 测试不同 helm 测试用于通过作业中运行的任意代码来测试已部署的图表 我想要实现的是迭代一组值并检查每个值生成的 K8s 资源 假设我们要测试您的图表是否正确编写 图表 值
  • 格式化浮点值,保留 2 位小数[重复]

    这个问题在这里已经有答案了 如何将结果四舍五入到小数点后两位并将其显示在结果标签上 我发现了一些陈述 但我对 Swift 很陌生 实际上我很难为我的项目重建示例 import UIKit class ViewController UIVie
  • 在 docker 中为 docker golang api 的容器设置端口

    我期待使用 docker golang api 做下面这样的事情 cmd docker run t i p 8989 8080 image name bin bash 我也在使用golang sdkhttps github com moby
  • 如何在 Spring Boot Health 中添加自定义健康检查?

  • 如何创建独立的电梯 Web 应用程序?

    如何制作独立的电梯应用程序 使用哪些工具 库 与在某些应用程序服务器中使用 lift 应用程序作为战争相比 性能如何 使用 onejar maven 插件http onejar maven plugin googlecode com svn
  • 创建视图中可用的自定义助手

    我有太多文本实用方法 例如MakeShortText string text int length RemoveTags string text TimeAgo DateTime date 和别的 我想从单独的助手访问它们 如下一个示例所示
  • Visual Studio Code - 基于 .gitignore 自动排除

    我希望 VSCode 根据我的情况自动排除文件 文件夹 gitignore配置 对于资源管理器排除 我找到了一个扩展 explorer excluded files它管理着files exclude设置 但对于快速打开文件 cmd p 我什
  • GitHub 的 README 支持哪些文件类型

    我注意到 GitHub README 使用了许多不同的文件类型 最常见的是 md and rst 查看 GitHub 文档和帮助页面后 我没有找到有关允许哪些文件类型的信息 我只是在寻找类型列表 以便我可以找出可以在下一个自述文件中使用哪些
  • AngularJS 与 Apache Tiles

    我在我的项目中使用 Spring MVC 和 AngularJS AngularJs 可以吗 routing和 ngView 被用来代替or与阿帕奇瓷砖框架 据我所知 使用 routing 和 ngView 我们创建模板并在单页应用程序中重
  • 使用 CSS2 将

    有没有一个好的跨浏览器解决方案来拆分单个 ul 分成两列 或者最好的方法仍然是使用两个相邻浮动的单独列表 我正在寻找单一的解决方案 因此如果需要替代 HTML 来支持旧版浏览器 则不允许使用 CSS3 优点 要求浏览器支持IE7 FF3 我
  • Elasticsearch 主分片不平衡

    我注意到我的 elasitcsearch 集群中有一个奇怪的行为 正如您在下面的屏幕截图中看到的 它显示了 kopf 插件 大多数主分片位于 nl 1 服务器上 我认为 elasitcsearch 在所有服务器上均匀地平衡了主分片 我错了吗
  • 如何反转 TextView 选取框的方向

    我想反转 TextView 中选取框的方向 默认情况下 文本从右向左移动 我希望它从左向右移动 我怎样才能做到这一点 我想出了一个非常简单易行的方法来做到这一点 我制作了一个选框效果 根据我们的选择向两个方向移动 所以 这里有一个技巧 我在
  • 在一项服务中引用多个 API 调用 (Angular)

    我正在通过 Angular http 请求访问 API 以收集不同足球队的信息 如果我只访问一个团队 那就没问题了 我将创建一个进行调用的服务 然后在我的控制器中引用该服务函数 但是 我希望在多个团队中执行此操作 而不必为每个团队创建单独的
  • 有没有办法调用需要 IEnumerable 且具有单个值的 C# 方法? ...通过基准测试[重复]

    这个问题在这里已经有答案了 我只是想知道我是否错过了一些语法糖或微优化 如果我调用一个需要 IEnumerable 值的方法 但我只有一个值 那么我将该单个值放入一个数组中 例如 var x 1 23 SquareAllTheNumbers
  • 在.NET Core中注入通用接口

    我想将此接口注入到我的控制器中 public interface IDatabaseService
  • 如何获取 Angular2 中元素的当前位置信息

    我有ElementRef我的导航栏 我试图找出它离我的窗口顶部有多近 这样我就可以让它粘起来 div class nav bar div ViewChild navBar navBarElement 我正在滚动事件中打印出它的 native
  • 如何确定 RecyclerView 最后一项在屏幕上可见?

    我有一个RecyclerView我将数据列表添加到RecyclerView 我想在列表中添加更多数据 最后一次RecyclerView项目在屏幕上可见 之后我想进行网络服务调用并更新RecyclerView数据 我怎样才能实现这个目标 有什
  • 有没有办法让控制台应用程序仅使用 .NET Core 中的单个文件运行?

    在 NET框架中 您可以制作一个 EXE将从命令行运行的文件 无需任何额外的配置文件 如果使用 ILMerge 您可以将所有 DLL参考文献1 EXE集会 我正在尝试使用 NET Core 来完成同样的事情 但到目前为止还没有成功 即使是最