如何摆脱 Net 5.0 版本中的“%AppName%.runtimeconfig.dev.json”文件

Posted

技术标签:

【中文标题】如何摆脱 Net 5.0 版本中的“%AppName%.runtimeconfig.dev.json”文件【英文标题】:How to get rid of '%AppName%.runtimeconfig.dev.json' files in release for Net 5.0 【发布时间】:2021-12-16 23:01:33 【问题描述】:

我已经为 Net 5.0 创建了一个控制台应用程序并构建了它的发布版本。在发布文件夹中,我找到了一些应用程序并不真正需要的文件(它在没有它们的情况下启动和工作):%AppName%.deps.json 和 %AppName%.runtimeconfig.dev.json。 在第二个文件中,我找到了一些列表(名称为“additionalProbingPaths”),在我的本地机器上包含三个绝对路径(其中两个甚至包含我的用户名)。显然,这些路径在运行我的应用程序的任何其他机器上都没有用。我想办法完全禁用生成这个文件,但发现只有:

<GenerateRuntimeConfigurationFiles>false</GenerateRuntimeConfigurationFiles>

但此选项禁用生成 %AppName%.runtimeconfig.json 并且我的可执行文件无法正常工作。 我还发现了这个link(用于生成这些文件的 MSBuild 任务的源代码)。此任务包含两个布尔选项:WriteAdditionalProbingPathsToMainConfig 和 GenerateRuntimeConfigDevFile。它们几乎是我想要的,但我找不到通过项目文件的 PropertyGroup 设置此选项的方法。我试过了:

<WriteAdditionalProbingPathsToMainConfig>true</WriteAdditionalProbingPathsToMainConfig>
<GenerateRuntimeConfigDevFile>false</GenerateRuntimeConfigDevFile>

但它不起作用。现在我只需在 Post-Build Event 中通过 del 命令删除该文件。 有什么方法可以阻止生成该文件 (%AppName%.runtimeconfig.dev.json)?据我了解,这些“附加探测路径”会导致一些本地 nuget 存储库(但我的应用程序没有安装任何 nuget 包!):

C:\\Users\\%UserName%\\.nuget\\packages
C:\\Users\\%UserName%\\.dotnet\\store\\|Arch|\\|tfm|

如果我的应用程序已经构建并准备好运行,它们需要什么。或者最终应用用户需要下载一些包来运行我的应用? 如果重要的话,我会使用 Visual Studio 2019。

P.S:很抱歉提出这么愚蠢的问题,但我是 Net Core 的新手。

【问题讨论】:

【参考方案1】:

文件%AppName%.runtimeconfig.dev.json 没有被复制到发布目录是毫无价值的,这应该是您打包/发送给最终用户的内容。

如果我通过dotnet build -c Release 命令在发行版中构建默认应用程序,文件夹的内容如下:

但是,当我使用dotnet publish -c Release 命令(官方支持的唯一一种准备部署应用程序的方式)时,这里是文件夹的内容;你可以看到%AppName%.runtimeconfig.dev.json 不存在:

来自official documentation关于发布命令:

dotnet publish 编译应用程序,读取项目文件中指定的依赖项,并将生成的文件集发布到目录。dotnet publish 命令的输出已准备好部署到托管系统(例如,服务器、PC、Mac、笔记本电脑)以供执行。 这是为部署准备应用程序的唯一官方支持方式

相比之下,official documentation 关于构建命令:

dotnet build 命令将项目及其依赖项构建到一组二进制文件中。 (...) dotnet build 的产品尚未准备好转移到另一台机器上运行。要创建可部署的应用程序版本,您需要发布它(例如,使用dotnet publish 命令)。

总结:不用担心%AppName%.runtimeconfig.dev.json,改用dotnet publish 命令。

【讨论】:

以上是关于如何摆脱 Net 5.0 版本中的“%AppName%.runtimeconfig.dev.json”文件的主要内容,如果未能解决你的问题,请参考以下文章

如何摆脱 ASP.Net MVC 中的 Home?

Angular不支持当前版本的Node(16.4.1)。如何完全摆脱mac中的软件?

.NET 5.0 中的 Windows 媒体播放器

我如何摆脱 Xcode 中的 IOS 版本“部分:在 IOS X 中引入”警告

.Net 5.0 中的 Endpoint.Behaviors 和 clientRuntime.MessageInspectors 在哪里?

.NET 5.0 RC1 发布,离正式版发布仅剩两个版本,与 netty 相比更具竞争力