2017-03-07 153 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文件。 –