.NET Core发布和版本错误

时间:2019-04-01 13:30:48

标签: visual-studio .net-core publish

我正在使用.NET Core应用程序和自包含的发布功能搜索错误消息和不明确的行为。我刚刚安装了.NET Core 2.2.3 SDK,并使用Visual Studio 2017(15.9)创建了一个名为CoreVerTest的简单控制台应用程序。至此一切都还可以。它说:“ Hello World!”当我运行它时。

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

@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

这将清除所有内容,然后执行

  • 正常的Release版本,取决于框架
  • 用于Windows x64的独立发布版本的构建和发布
  • 为Linux ARM(我的主要目标平台)构建并发布的独立发行版

我根本没有触摸过.csproj文件,它们都是默认设置。

与此有关的问题很多:

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

      

    错误NETSDK1061:Microsoft.NETCore.App版本2.2.3出现错误,wiederhergestellt,Aktuellen Einstellungenwürdestattdessen版本2.2.0版本发生了变化。 Um die Problem Problem zu beheben,müssenSie sicherstellen,Waderherstellung和fürnachfolgendeVorgängewie das Kompilieren oderVeröffentlichen柴油厂Einstellungen verwendet werden。运行时标识符问题,RuntimeIdentifier-Eigenschaft在Kompilierung或Veröffentlichung,在Wiederherstellung festgelegt举行。 Weitere Informationen找到了https://aka.ms/dotnet-runtime-patch-selection

    重建解决方案或VS重新启动后,错误消失了。再次运行清洁零件时,它不会消失。

  2. 目前尚不清楚打包哪个版本的.NET Core。我在publish目录中找不到任何DLL给我2.2.3版本,所有东西都有有趣的随机数,例如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的位)?

(我已经在其他地方报告了错误消息,但找不到它在哪里。也没有解决方案。)

1 个答案:

答案 0 :(得分:0)

进行编辑以处理这两种情况。

尝试使用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. 自包含部署具有针对Microsoft.NETCore.App的提及2.2.2的.deps.json文件。他们的runtimeconfig.json将为空。
  2. 与框架相关的框架具有2.2.0版的runtimeconfig.json,因此将提取系统上安装的所有2.2。*。