【问题标题】:.NET Core publish and version errors.NET Core 发布和版本错误
【发布时间】:2019-04-01 13:30:48
【问题描述】:

我正在寻找 .NET Core 应用程序和独立发布的错误消息和不明确的行为。我刚刚安装了 .NET Core 2.2.3 SDK 并使用 Visual Studio 2017 (15.9) 创建了一个名为 CoreVerTest 的简单控制台应用程序。到目前为止一切都很好。它说“你好,世界!”当我运行它时。

然后我继续创建自包含版本的构建脚本。这是项目目录中的脚本build.cmd(.csproj 所在的位置):

@echo off
set TargetFramework=netcoreapp2.2

:: Clean
if exist bin\Release\%TargetFramework% rd /s /q bin\Release\%TargetFramework% || goto error
dotnet clean -v m -c Release -nologo || goto error

:: Build
powershell write-host -fore Blue Building and publishing...
dotnet publish -c Release -nologo || goto error

powershell write-host -fore Blue Publishing for win-x64...
dotnet publish -c Release -r win-x64 -nologo || goto error

powershell write-host -fore Blue Publishing for linux-arm...
dotnet publish -c Release -r linux-arm -nologo || goto error

:: Exit
powershell write-host -fore Green Build finished.
timeout /t 2 /nobreak >nul
exit /b

:error
pause

这会清除所有内容,然后进行

  • 一个正常的发布版本,依赖于框架
  • 适用于 Windows x64 的独立发行版构建和发布
  • 为 Linux ARM(我的主要目标平台)构建和发布的独立版本

我根本没有碰过.csproj文件,都是默认的。

这有很多问题:

  1. 在 Visual Studio 中打开项目时运行 build.cmd 后,VS 显示以下错误消息:

    错误 NETSDK1061: Das Projekt wurde mit Microsoft.NETCore.App, Version 2.2.3 wiederhergestellt, aber mit den aktuellen Einstellungen würde stattdessen Version 2.2.0 verwendet werden。 Um dieses Problem zu beheben, müssen Sie sicherstellen, dass für die Wiederherstellung und für nachfolgende Vorgänge wie das Kompilieren oder Veröffentlichendieselben Einstellungen verwendet werden。 Dieses Problem tritt typischerweise auf, wenn die RuntimeIdentifier-Eigenschaft bei der Kompilierung oder Veröffentlichung, aber nicht bei der Wiederherstellung festgelegt wrd。 Weitere Informationen finden Sie unter https://aka.ms/dotnet-runtime-patch-selection.

    重建解决方案或 VS 重新启动后,错误消失。再次运行 clean 部分时它不会消失。

  2. 目前还不清楚打包的是哪个版本的 .NET Core。我在发布目录中找不到任何提供 2.2.3 版本的 DLL,所有内容都有有趣的随机数,例如 4.6 或 10.0。在另一个更复杂的项目中,我的印象是没有执行前滚,而是发布了 .NET Core 2.2.0。我无法验证。

  3. This page 展示了如何在运行时查询框架运行时版本。当我从 Visual Studio 运行它时它显示 2.2.3,但当我运行一个独立的应用程序时它是空的。所以这不适用于独立的应用程序。

如何消除 Visual Studio 中的错误消息并验证所有版本是否正确(期望依赖框架的应用程序以 2.2.0 为目标并在 2.2.3 上运行(如果已安装);期望自包含应用程序能够仅包括 2.2.3 的位)?

(我已经在别处报告了错误消息,但找不到那个地方。也没有解决方案。)

【问题讨论】:

    标签: visual-studio .net-core publish


    【解决方案1】:

    编辑以处理这两种情况。

    尝试使用 RuntimeIdentifier 上的条件设置 RuntimeFrameworkVersion:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.2</TargetFramework>
      </PropertyGroup>
    
      <PropertyGroup Condition="'$(RuntimeIdentifier)' == 'win-x64'">
        <RuntimeFrameworkVersion>2.2.2</RuntimeFrameworkVersion>
      </PropertyGroup>
    
      <PropertyGroup Condition="'$(RuntimeIdentifier)' == 'linux-arm'">
        <RuntimeFrameworkVersion>2.2.2</RuntimeFrameworkVersion>
      </PropertyGroup>
    
    </Project>
    

    注意:上面我将 RuntimeFrameworkVersion 设置为 2.2.2 只是为了验证自包含发布不只是选择我系统上安装的最新版本。您可以将其设置为所需的版本。

    构建后你应该看到:

    1. 自包含部署的 .deps.json 文件提及 Microsoft.NETCore.App 的 2.2.2。他们的 runtimeconfig.json 将为空。
    2. 依赖于框架的框架具有版本为 2.2.0 的 runtimeconfig.json,因此将拾取系统上安装的任何 2.2.*。

    【讨论】:

    • 这是否意味着依赖于框架的应用程序只有在至少安装了 2.2.3 的情况下才会运行?不建议这样做。如果至少安装了 2.2.0 但使用最新安装的运行时,它应该可以工作。
    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2020-01-26
    • 2021-12-22
    相关资源
    最近更新 更多