2017-03-07 49 views
21

VS2017迄今已正確地將幾個基於project.json/.xproj的項目轉換爲新的.csproj格式。如何使用VS2017升級csproj文件

我還希望使用新的.csproj格式,以前的.csproj項目以前只針對.NET Framework(即,它們不適用於dnx/dotnet CLI)。

看來即使一個項目仍然只是針對.NET Framework,<PackageReference>的好處和一個易於編輯的.csproj文件似乎值得(希望不會太大)麻煩。

這可能直接與Visual Studio 2017做?

如果不是,需要什麼手動步驟?

+5

可能的[如何將非核心csproj轉換爲VS2017格式]的副本(http://stackoverflow.com/questions/42307516/how-to-convert-a-non-core-csproj-to-vs2017-格式) – Jimmy

+0

似乎對非核心項目使用新的'.csproj'是有可能的,有限制,如[顯示在此](http://www.natemcmaster.com/blog/2017/03/09/vs2015-to -vs2017-upgrade /) –

+1

是的,對於非Core項目使用新的csproj文件是可能的,但並非必要。請參閱下面的答案。 – Mark

回答

18

我在編輯我的答案,以清楚說明您不需要升級您的.csproj文件。正如Drew在下面評論的那樣,這樣做有好處。但是,VS2017將繼續使用經典的csproj文件。此外,VS2017中沒有任何內容會爲您執行升級。如果您確實希望利用新格式,那麼通過下面的步驟應該會有所幫助。

.csproj文件升級到新的Visual Studio 2017格式對於簡單的類庫或控制檯項目很容易。

如果您未使用版本控制,請在開始之前確保備份您的csproj文件,並同時備份Properties/AssemblyInfo.cspackages.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

如果您正在使用您的項目中的NuGet包,你需要轉移這些新的格式爲好。在Visual Studio 2017之前NuGet除了在csproj中引用外,還依賴於項目根目錄中名爲Packages.config的文件。要遷移您的NuGet包引用,請右鍵單擊您的解決方案並加載Nuget包管理器。一旦加載到右上角,點擊cog,NuGet程序包管理器選項將加載。選擇General。在包管理下,將選項Default package management format更改爲PackageReference。此時,您必須將所有NuGet軟件包手動添加回解決方案。您可以在項目的根文件夾的packages.config文件中找到所有軟件包。一旦你添加了所有的軟件包,你可以刪除packages.config文件。

+4

非常感謝。新項目的一些好處可能會促進升級:1)更簡單地管理NuGet依賴項(不需要更多的包文件,也不需要使用包管理器控制檯或VS的管理NuGet包),2)定義NuGet包的能力直接在項目文件中,3)能夠編輯.csproj文件而無需卸載/重新加載 –

+0

@DrewNoakes以及一個'.csproj'文件,該文件通過版本控制更容易管理,並且可以在合併期間手工編輯。我在幾個項目中使用了@ thekip的工具,並取得了很大的成功。 – seangwright

11

我已經創造了這個工具,它的csproj文件的工作原理:https://github.com/hvanbakel/CsprojToVs2017

你可以只在一個運行的csproj它,它會轉換文件,並創建舊的備份。

+0

這適用於基本的CSProj文件。 –