我在編輯我的答案,以清楚說明您不需要升級您的.csproj
文件。正如Drew在下面評論的那樣,這樣做有好處。但是,VS2017將繼續使用經典的csproj
文件。此外,VS2017中沒有任何內容會爲您執行升級。如果您確實希望利用新格式,那麼通過下面的步驟應該會有所幫助。
將.csproj
文件升級到新的Visual Studio 2017格式對於簡單的類庫或控制檯項目很容易。
如果您未使用版本控制,請在開始之前確保備份您的csproj
文件,並同時備份Properties/AssemblyInfo.cs
和packages.config
。新的csproj
文件非常棒。在許多項目中,我用十幾個代碼取代了數百行代碼。但是,由於Visual Studio 2017繼續支持以前的csproj
文件,這可能是過早優化的一種情況。如果您的解決方案包含許多項目,許多NuGet軟件包以及任何定製到csproj
,那麼您可能會進行不必要的製作工作項目。
用相應的代碼替換.csproj文件的全部內容,如下所示。
類庫
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
</PropertyGroup>
</Project>
控制檯應用程序
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net462</TargetFramework>
</PropertyGroup>
</Project>
更改<TargetFramework>
屬性你需要.NET版本,如.net452,.net46,.net461等
默認情況下,您的項目文件夾中的所有代碼將由編譯器接收。如果您的項目文件夾之外有代碼,則必須按照以前版本的Visual Studio和csproj
中的相同方式明確引用它。
完成上述更改後,將在Visual Studio 2017中加載您的解決方案。此時最基本的項目應該構建。如果不是,您可能需要添加缺少的程序集或項目引用。添加引用與以前版本的Visual Studio中的添加引用非常相似。在Solution Explorer中選擇您的項目,右鍵單擊Dependencies
,然後選擇Add Reference
。添加您缺少的任何框架或項目引用。
嘗試再次構建解決方案/項目。您可能會收到有關重複屬性的錯誤。此錯誤是因爲之前在AssemblyInfo.cs
中定義的屬性已移至csproj文件。刪除在Properties文件夾下找到的AssemblyInfo.cs
文件應解決這些錯誤。在刪除AssemblyInfo.cs
之前,您應該移動您定義的任何數據。大多數屬性可以輸入到項目文件的包信息部分。右鍵單擊您的項目名稱,選擇Package頁面,然後輸入之前在AssemblyInfo.cs
文件中定義的任何數據。這包括諸如程序集版本,作者,版權等的項目。
下面是顯示上一步驟的屏幕快照。
![enter image description here](https://i.stack.imgur.com/Wy03V.jpg)
如果您正在使用您的項目中的NuGet包,你需要轉移這些新的格式爲好。在Visual Studio 2017之前NuGet除了在csproj
中引用外,還依賴於項目根目錄中名爲Packages.config
的文件。要遷移您的NuGet包引用,請右鍵單擊您的解決方案並加載Nuget包管理器。一旦加載到右上角,點擊cog,NuGet程序包管理器選項將加載。選擇General
。在包管理下,將選項Default package management format
更改爲PackageReference。此時,您必須將所有NuGet軟件包手動添加回解決方案。您可以在項目的根文件夾的packages.config
文件中找到所有軟件包。一旦你添加了所有的軟件包,你可以刪除packages.config
文件。
可能的[如何將非核心csproj轉換爲VS2017格式]的副本(http://stackoverflow.com/questions/42307516/how-to-convert-a-non-core-csproj-to-vs2017-格式) – Jimmy
似乎對非核心項目使用新的'.csproj'是有可能的,有限制,如[顯示在此](http://www.natemcmaster.com/blog/2017/03/09/vs2015-to -vs2017-upgrade /) –
是的,對於非Core項目使用新的csproj文件是可能的,但並非必要。請參閱下面的答案。 – Mark