升級 .Net Core 1.x App 及 .Net Standard 1.x Library 到 2.0 版

  • 413
  • 0

紀錄升級 .Net Core 1.x App 以及 .Net Standard 1.x 專案到 2.0 版的過程以及遇到 nuget 相依性問題

今天打算把很久沒動的一個用 .Net Core 1.0.4 寫的 App 以及他依賴的 Library 是用 .Net Standard 1.6 寫成的,都升級到 2.0 版

升級的過程中也在途中遇到一些問題,在這邊記錄下來

我用的是 Visual Studio 2017 (15.4) 版本,打開很久沒開的方案檔,出現

升級後,報告顯示沒有錯誤

但是實際上卻編譯不過,看起來是升級過程中,.Net Standard 的 nuget package 被降版了,導致原本依賴在較高版本的 .Net Standard 的其他 nuget 套件變得無法使用

一開想說去 nuget 把 NETStandard.Library 升級到 2.0 就好,但是進去發現版本中有 2.0,但是卻不能按...顯示被專案封鎖

看起來只能手動去改專案中的版本了

首先先用文字編輯器開起 Library 的 csporj 檔案

把 TargetFramework 改為 netstandard2.0,NetStandardImplicitPackageVersion 改成 2.0.0

下面是改完後的版本

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

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AssemblyName>Lib</AssemblyName>
    <PackageId>Lib</PackageId>
    <NetStandardImplicitPackageVersion>2.0.0</NetStandardImplicitPackageVersion>
    <PackageTargetFallback>$(PackageTargetFallback);dnxcore50</PackageTargetFallback>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
    <PackageReference Include="sqlite-net-pcl" Version="1.3.1" />
  </ItemGroup>

</Project>

 

接著開 .Net Core App 的 csproj 

把 TargetFramework 改成 netcoreapp2.0,RuntimeFrameworkVersion 改成 2.0.0

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <AssemblyName>Project</AssemblyName>
    <OutputType>Exe</OutputType>
    <PackageId>Project</PackageId>
    <RuntimeFrameworkVersion>2.0.0</RuntimeFrameworkVersion>
    <PackageTargetFallback>$(PackageTargetFallback);dnxcore50</PackageTargetFallback>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Lib\Lib.csproj" />
  </ItemGroup>

</Project>

 

重建後,就可以正常編譯成功拉~~

========== 全部重建: 2 成功、0 失敗、 0 略過 ==========

 

如果還是有錯誤,可以去每個專案看一下目標 Framework 是不是都在 2.0 了