我正在使用.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
这将清除所有内容,然后执行
我根本没有触摸过.csproj文件,它们都是默认设置。
与此有关的问题很多:
在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重新启动后,错误消失了。再次运行清洁零件时,它不会消失。
目前尚不清楚打包哪个版本的.NET Core。我在publish目录中找不到任何DLL给我2.2.3版本,所有东西都有有趣的随机数,例如4.6或10.0。从另一个更复杂的项目中,我的印象是未执行前滚,而是发布了.NET Core 2.2.0。我无法验证。
This page显示了如何在运行时查询框架运行时版本。当我从Visual Studio运行它时,它显示为2.2.3,但是当运行一个独立的应用程序时,它为空。因此,这不适用于独立的应用程序。
我如何摆脱Visual Studio中的错误消息并验证所有版本均正确(期望框架相关的应用程序以2.2.0为目标并在2.2.3上运行(如果已安装);期望独立的应用程序能够仅包含2.2.3的位)?
(我已经在其他地方报告了错误消息,但找不到它在哪里。也没有解决方案。)
答案 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,只是为了验证自包含发布不只是获取系统上安装的最新版本。您可以将其设置为所需的版本。
构建后,您应该看到: