本文檔介紹 .NET Core 項目的遷移方案,並探討以下三個遷移方案:
本文檔僅適用於仍使用 project.json 的較舊的 .NET Core 項目。 它不適用於從 .NET Framework 遷移到 .NET Core。
可使用以下任一方法從 project.json 遷移到 .csproj:
這兩種方法使用同一個基礎引擎來遷移項目,因此,二者結果相同。 在大多數情況下,只需使用這兩種方法中的一種將 project.json 遷移到 csproj,而無需進一步對項目文件執行手動編輯。 生成的 .csproj 文件的名稱與包含目錄名稱相同。
打開 .xproj 文件或打開引用 .xproj 文件的解決方案文件時,將顯示「單向升級」對話框。 該對話框將顯示要遷移的項目。 如果打開解決方案文件,則將列出解決方案文件中指定的所有項目。 查看要遷移的項目的列表,然後選擇「確定」。
Visual Studio 將遷移自動選擇的項目。 遷移解決方案時,如果不選擇所有項目,會顯示相同的對話框,要求升級該解決方案的其餘項目。 遷移項目後,可通過在「解決方案資源管理器」窗口中右鍵單擊該項目,並選擇「編輯 <項目名稱 > .csproj」來查看和修改其內容。
已遷移的文件(project.json、global.json、.xproj 和解決方案文件)會移動到備份文件夾。 遷移的解決方案文件會升級到 Visual Studio 2017,將無法在先前版本的 Visual Studio 中打開該解決方案文件。 還會保存並自動打開名爲 UpgradeLog.htm 的文件,該文件包含遷移報告。
重要
新工具在 Visual Studio 2015 中不可用,因此無法使用該版本的 Visual Studio 遷移項目。
在該命令行方案中,可以使用 dotnet migrate
命令。 它會按順序遷移項目、解決方案或一組文件夾,具體取決於所找到的項。 遷移項目時,將遷移項目及其所有依賴項。
已遷移的文件(project.json、global.json 和 .xproj)會移動到備份文件夾。
備註
如果使用的是 Visual Studio Code,dotnet migrate
命令不會修改 tasks.json
等 Visual Studio Code 專屬文件。 需要手動更改這些文件。 如果使用 Project Ryder 或 Visual Studio 以外的任何編輯器或集成開發環境 (IDE),也是如此。
請參閱 project.json 和 csproj 屬性之間的映射,瞭解 project.json 和 csproj 格式的比較情況。
請運行 dotnet --version
查看所使用的版本。 dotnet migrate
需要 .NET Core CLI RC3 或更高版本。 如果當前目錄或父級目錄中有 global.json 文件,且 sdk
版本設置爲較低版本,則會收到此錯誤。
如果仍在使用 DNX 進行 .NET Core 開發,則應分兩個階段完成遷移過程:
備註
已於 .NET Core CLI 的預覽版 1 發佈期間正式棄用 DNX。
隨着工具的每個新的預發佈版本的推出,.NET Core csproj 格式也在不斷變化發展。 沒有工具可以將項目文件從早期版本的 csproj 遷移到最新版本,因此需要手動編輯項目文件。 實際步驟取決於要遷移的項目文件的版本。 根據版本之間的變化,需考慮以下指導信息:
<Project>
元素中刪除工具版本屬性(如果存在)。<Project>
元素中刪除 XML 命名空間 (xmlns
)。Sdk
屬性添加到 <Project>
元素,並將其設置爲 Microsoft.NET.Sdk
或 Microsoft.NET.Sdk.Web
。 此屬性指定項目使用要使用的 SDK。 Microsoft.NET.Sdk.Web
用於 Web 應用。<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
和 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
語句。 SDK 隱含這些 import 語句,因此項目中不需要這些語句。Microsoft.NETCore.App
或 NETStandard.Library
的 <PackageReference>
,應將其刪除。 SDK 隱含這些包引用。Microsoft.NET.Sdk
<PackageReference>
元素(如果存在)。 SDK 引用來自 <Project>
元素上的 Sdk
屬性。完成這些步驟後,項目應與 RTM .NET Core csproj 格式完全兼容。
有關從舊的 csproj 格式遷移到新的 csproj 格式之前和之後情況的示例,請參閱 .NET 博客上的 Updating Visual Studio 2017 RC – .NET Core Tooling improvements(更新 Visual Studio 2017 RC - .NET Core 工具改進)文章。