首页 > 解决方案 > 我的 dotnet 3.1 工具如何在没有 deps.json 或 runtimeconfig.json 的情况下发布工作构建

问题描述

当我在具有以下 dotnet --info 的 ci 容器中进行自包含发布时

16:26:12  .NET Core SDK (reflecting any global.json):
16:26:12   Version:   3.1.404
16:26:12   Commit:    470f6754b3
16:26:12  
16:26:12  Runtime Environment:
16:26:12   OS Name:     Windows
16:26:12   OS Version:  10.0.17763
16:26:12   OS Platform: Windows
16:26:12   RID:         win10-x64
16:26:12   Base Path:   c:\tools\dotnet\sdk\3.1.404\
16:26:12  
16:26:12  Host (useful for support):
16:26:12    Version: 3.1.10
16:26:12    Commit:  1721e39439
16:26:12  
16:26:12  .NET Core SDKs installed:
16:26:12    3.1.404 [c:\tools\dotnet\sdk]
16:26:12  
16:26:12  .NET Core runtimes installed:
16:26:12    Microsoft.AspNetCore.App 3.1.10 [c:\tools\dotnet\shared\Microsoft.AspNetCore.App]
16:26:12    Microsoft.NETCore.App 3.1.10 [c:\tools\dotnet\shared\Microsoft.NETCore.App]
16:26:12    Microsoft.WindowsDesktop.App 3.1.10 

我得到了一个工作自包含的发布版本。但输出文件不包括 *.runtimeconfig.json 或 *.deps.json 等文件。这些文件不是总是需要/创建的吗?使用 .NET 5 工具发布给我一个无法正常工作的构建(故障排除超出了这个问题的范围),并带有与 deps.json 相关的错误。起初我认为 deps.json 是在 NET 5 中添加的,因为我的 3.1 输出中没有它们。但我发现这篇文章https://natemcmaster.com/blog/2017/12/21/netcore-primitives/来自 2017 年,他在其中谈到即使在核心 2.1 sdk 中也需要这些文件。很明显,这些文件已经需要很长时间了。

dotnet publish $Project -o $tempDir -r win-x64 -c Release 我在项目文件中使用并进一步发布设置发布(使用上述环境) :

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <DebugType>embedded</DebugType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>

    <SelfContained>true</SelfContained>
    <PublishTrimmed>true</PublishTrimmed>
    <PublishSingleFile>false</PublishSingleFile>
    <PublishReadyToRun>false</PublishReadyToRun>
    <Platform>Any CPU</Platform>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
    <Platforms>AnyCPU</Platforms>
    <ExcludeGeneratedDebugSymbol>false</ExcludeGeneratedDebugSymbol>
  </PropertyGroup>

这是发布目录的输出(请注意,我已将应用名称捏造为“MyApplication”并删除了一些不相关的文件以保护隐私)https://pastebin.com/BHCevmbh

在没有这些文件的情况下,我正在使用 3.1 sdk 构建工作是怎么回事?

更新:我刚刚发现,如果我从 .NET 5 构建中删除 *.deps.json 和 *.runtimeconfig.json 文件,它们就会开始工作。那么这些文件是必需的吗?我读过的所有内容都说它们是,但它们似乎不是......如果它们可以被删除并且应用程序仍然可以工作(或者在这种情况下它们可能配置错误,应用程序开始工作)为什么它们存在以前没有)?

标签: .net

解决方案


推荐阅读