紀錄升級 .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 了