VS强制更新至2.1.4后,.netcore-mvc应用程序将不会以2.1.3为目标

时间:2018-09-21 19:21:42

标签: c# asp.net-core-mvc

在.net核心框架2.1.4发布之前,我开始开发一个新网站,我们的生产环境都设置了“即将推出”页面等。

由于该服务器托管其他站点,因此我们不希望重新启动以升级到2.1.4,因此我使用以下方式更新了csproj文件:

    <RuntimeFrameworkVersion>2.1.3</RuntimeFrameworkVersion>

我还检查了Microsoft.NETCore.App的NuGet软件包,并将其设置为2.1.3

但是,当我发布网站并将其复制到主机上的文件夹时,它仍然会记录

  

找不到任何兼容的框架版本   指定的框架'Microsoft.NETCore.App',版本'2.1.4'不是   找到了。     -检查应用程序依赖性并确定安装在以下位置的框架版本:         “路径”     -安装.NET Core必备软件可能有助于解决此问题:         http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409     -.NET Core框架和SDK可以从以下位置安装:         https://aka.ms/dotnet-download     -已安装以下版本:         1.0.4位于[C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App]         1.1.1位于[C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App]         2.1.2位于[C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App]         2.1.3位于[C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App]

我不知所措,如何将这个项目更改为目标2.1.3而不是2.1.4?

CSProj:

    <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <RuntimeFrameworkVersion>2.1.3</RuntimeFrameworkVersion>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.3" />
    <PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
    <PackageReference Include="System.Linq.Dynamic.Core" Version="1.0.8.18" />
  </ItemGroup>

</Project>

VS中Nuget依赖项的屏幕截图: Screenshot of Dependencies in VS

2 个答案:

答案 0 :(得分:0)

在我看来,在项目中更改NetCore版本唯一需要做的就是更改版本之间的csproj,例如,这是在2.1.4中运行的一个外部项目的csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
    <DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="wwwroot\**" />
    <Content Remove="wwwroot\**" />
    <EmbeddedResource Remove="wwwroot\**" />
    <None Remove="wwwroot\**" />
  </ItemGroup>

  <ItemGroup>
    ...
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.4" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="2.1.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.4" />
    ...
  </ItemGroup>

  ...

</Project>

我们只需更改两个依赖项就可以将其降级为2.1.3

    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.3" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.3" />

我可以看到我们没有使用您的指令<RuntimeFrameworkVersion>2.1.3</RuntimeFrameworkVersion>

我不知道这有什么不同。

另一方面,知道您想返回的原因会很有趣,因为上次更新没有重大更改,这是非常必要的,因为它要fix a vulnerability可能会导致您出现DOS。

由于点网核心的更新周期将在很短的时间内,并且停机确实是一个令人担忧的问题,因此我也强烈建议您开始使用Docker,这样可以允许您运行多个环境( 2.1,2.1.2 ...)在同一个docker中。

我们甚至遇到了核心2.1的错误,因此我们正在运行一个单独的容器,该核心仅在net core 2.0中具有一个功能,而我们的应用很乐意在与2.1.4中的应用相同的服务器中运行

此外,请确保进行清理并构建,您甚至可以尝试手动删除obj和bin文件夹,只是要确保没有引起您该错误的内容

答案 1 :(得分:0)

尝试降级2天后,我决定在客户下班时间继续工作并将2.1.4部署到生产服务器,我知道这在技术上不是“答案”,但这是我唯一可以解决的方法需要在4天的时间范围内部署该问题。