如何使用VS2017升级csproj文件

Dre*_*kes 32 upgrade csproj visual-studio visual-studio-2017

到目前为止,VS2017已将多个project.json/ .xproj基于项目正确转换为新.csproj格式.

我还想将新.csproj格式.csproj用于以前仅针对.NET Framework的旧项目(即它们不能与dnx/dotnet CLI一起使用).

似乎即使一个项目仍然只针对.NET Framework,<PackageReference>一个易于编辑的.csproj文件的好处似乎值得(希望不是太大)麻烦.

这可以直接与Visual Studio 2017一起使用吗?

如果没有,需要采取哪些手动步骤?

Mar*_*ark 32

我正在编辑我的答案,以明确表示您不需要升级.csproj文件.正如Drew在下面评论的那样,这样做有好处.但是,VS2017将继续使用经典csproj文件就好了.此外,VS2017中没有任何内容可以为您执行升级.如果您希望利用新格式,请参阅下面的内容应该有所帮助.

.csproj对于简单的类库或控制台项目,将文件升级到新的Visual Studio 2017格式很容易.

如果你没有使用版本控制,在开始之前一定要备份你的csproj文件,两者都是Properties/AssemblyInfo.cs,和packages.config.新csproj文件很棒.在许多项目中,我用十几个代码替换了数百行代码.但是,由于Visual Studio 2017继续支持以前的csproj文件,这可能是过早优化的情况.如果您的解决方案包含许多项目,那么许多NuGet包以及任何自定义项csproj都可能会进行不必要的make work项目.

使用适当的代码替换.csproj文件的全部内容,如下所示.

班级图书馆

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net462</TargetFramework>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

控制台应用

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net462</TargetFramework>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

<TargetFramework>属性更改为您需要的.NET版本,如net452,net46,net461等.

默认情况下,编译器将拾取项目文件夹中的所有代码.如果您的项目文件夹外有代码,则必须以与以前版本的Visual Studio相同的方式显式引用它csproj.

完成上述更改后,在Visual Studio 2017中加载解决方案.此时应构建最基本的项目.如果不是,您可能需要添加缺少的程序集或项目引用.添加引用与在以前版本的Visual Studio中执行此操作非常相似.在解决方案资源管理器中选择您的项目,右键单击Dependencies,然后选择Add Reference.添加您缺少的任何框架或项目引用.

尝试再次构建您的解决方案/项目.您可能会收到有关重复属性的错误.此错误是因为先前定义的属性AssemblyInfo.cs已移至csproj文件.删除AssemblyInfo.cs在"属性"文件夹下找到的文件应该可以解决这些错误.在删除之前,AssemblyInfo.cs您应该移动您定义的任何数据.大多数属性都可以在项目文件的包信息部分中输入.右键单击项目名称,选择"包"页面,然后输入先前在AssemblyInfo.cs文件中定义的任何数据.这包括诸如汇编版本,作者,版权等项目.

下面是显示上一步的屏幕截图.

在此输入图像描述

如果您在项目中使用任何NuGet包,则还需要将它们移动到新格式.在Visual Studio 2017之前Packages.config,除了引用之外,NuGet还依赖于项目根目录中指定的文件csproj.要迁移NuGet包引用,请右键单击您的解决方案并加载Nuget包管理器.一旦加载到右上角,单击cog,将加载NuGet包管理器选项.选择General.在"包管理"下,将选项更改Default package management format为PackageReference.此时,您必须手动将所有NuGet包添加回您的解决方案.您可以packages.config在项目的根文件夹中找到该文件中的所有包.将所有软件包添加回来后,您可以删除该packages.config文件.

  • 非常感谢你.可能促使升级的新项目的一些好处:1)更简单的NuGet依赖关系管理(不再需要包文件,不需要使用包管理器控制台或VS管理NuGet包),2)定义NuGet包的能力直接在项目文件中,3)能够编辑.csproj文件而无需卸载/重新加载 (4认同)

the*_*kip 21

我已经创建了一个适用于csproj文件的工具:https://github.com/hvanbakel/CsprojToVs2017

你可以在csproj上运行它,它将转换文件并创建旧的备份.


Ale*_*xey 10

为此,可以使用.NET Upgrade Assistant 。

安装(将版本替换为最新版本,请检查NuGet.org):

  dotnet tool install --global upgrade-assistant --version 0.4.355802
Run Code Online (Sandbox Code Playgroud)

启动交互过程,并在第2步“将项目文件转换为SDK样式”后退出:

  upgrade-assistant upgrade <project>.csproj
Run Code Online (Sandbox Code Playgroud)