我正在编辑我的答案,以明确您不需要升级您的 .csproj 文件。正如德鲁在下面评论的那样,这样做有好处。但是,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>
控制台应用程序
<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 中添加引用非常相似。在解决方案资源管理器中选择您的项目,右键单击Dependencies,然后选择Add Reference。添加您缺少的任何框架或项目引用。
尝试再次构建您的解决方案/项目。您可能会收到有关重复属性的错误。此错误是因为之前在 AssemblyInfo.cs 中定义的属性已被移动到 csproj 文件中。删除属性文件夹下的AssemblyInfo.cs 文件应该可以解决这些错误。在删除 AssemblyInfo.cs 之前,您应该移动您定义的所有数据。大多数属性都可以在项目文件的包信息部分输入。右键单击您的项目名称,选择 Package 页面,然后输入之前在 AssemblyInfo.cs 文件中定义的任何数据。这包括汇编版本、作者、版权等项目。
下面是显示上一步的屏幕截图。
如果您在项目中使用任何 NuGet 包,您也需要将它们移动到新格式。在 Visual Studio 2017 之前,NuGet 依赖于项目根目录中名为 Packages.config 的文件以及 csproj 中的引用。要迁移您的 NuGet 包引用,请右键单击您的解决方案并加载 Nuget 包管理器。在右上角加载后,单击齿轮,将加载 NuGet 包管理器选项。选择General。在 Package Management 下,将选项 Default package management format 更改为 PackageReference。此时,您必须手动将所有 NuGet 包添加回您的解决方案。您可以在项目根文件夹的packages.config 文件中找到所有包。将所有包添加回来后,您可以删除 packages.config 文件。