.NET Core发布和版本错误

问题描述 投票:0回答:1

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

然后我继续创建自包含版本的构建脚本。这是项目目录中的脚本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:使用Microsoft.NETCore.App,版本2.2.3恢复项目,但使用当前设置,将使用版本2.2.0。要解决此问题,请确保使用相同的设置进行恢复和后续操作,例如编译或发布。在编译或发布期间设置RuntimeIdentifier属性时,通常会发生此问题,但在恢复期间不会发生此问题。有关更多信息,请参阅https://aka.ms/dotnet-runtime-patch-selection。 重建解决方案或VS重新启动后,错误消失。再次运行清洁部件时它不会消失。
  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个回答
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. 自包含部署的.deps.json文件提到2.2.2 for Microsoft.NETCore.App。他们的runtimeconfig.json将为空。
  2. 依赖于框架的框架具有版本2.2.0的runtimeconfig.json,因此将拾取系统上安装的任何2.2。*。
© www.soinside.com 2019 - 2024. All rights reserved.