Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何使用VS2017升级csproj文件_Visual Studio_Upgrade_Csproj_Visual Studio 2017 - Fatal编程技术网

Visual studio 如何使用VS2017升级csproj文件

Visual studio 如何使用VS2017升级csproj文件,visual-studio,upgrade,csproj,visual-studio-2017,Visual Studio,Upgrade,Csproj,Visual Studio 2017,到目前为止,VS2017已将多个基于项目.json/.xproj的项目正确转换为新的项目.csproj格式 我还希望将新的.csproj格式用于以前仅针对.NET Framework的较旧的.csproj项目(即它们不适用于dnx/dotnet CLI) 看起来,即使一个项目仍然只针对.NET框架,和一个易于编辑的.csproj文件的好处似乎值得(希望不是太大)麻烦 这可以直接使用Visual Studio 2017吗 如果没有,需要哪些手动步骤?我正在编辑我的答案,以明确您不需要升级.cspr

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

我还希望将新的
.csproj
格式用于以前仅针对.NET Framework的较旧的
.csproj
项目(即它们不适用于dnx/dotnet CLI)

看起来,即使一个项目仍然只针对.NET框架,
和一个易于编辑的
.csproj
文件的好处似乎值得(希望不是太大)麻烦

这可以直接使用Visual Studio 2017吗


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

我正在编辑我的答案,以明确您不需要升级
.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文件的全部内容,如下所示

类库


net462
控制台应用程序


Exe
net462
属性更改为所需的.NET版本,如net452、net46、net461等

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

进行上述更改后,请在Visual Studio 2017中加载您的解决方案。在这一点上,最基本的项目应该建立。如果没有,则可能需要添加缺少的程序集或项目引用。添加引用与在VisualStudio的早期版本中这样做非常相似。在解决方案资源管理器中选择您的项目,右键单击
依赖项
,然后选择
添加引用
。添加您缺少的任何框架或项目引用

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

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


如果您在项目中使用任何NuGet包,您也需要将它们移动到新格式。在Visual Studio 2017之前,NuGet依赖于项目根目录中名为
Packages.config的文件,以及
csproj
中的引用。要迁移NuGet包引用,请右键单击解决方案并加载NuGet包管理器。在右上角加载后,单击cog,将加载NuGet Package Manager选项。选择
常规
。在包管理下,将选项
默认包管理格式
更改为PackageReference。此时,您必须手动将所有NuGet包添加回您的解决方案。您可以在项目根文件夹的
packages.config
文件中找到所有包。添加所有包后,可以删除
packages.config
文件

我为此创建了一个工具,可用于csproj文件:


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

更新:下面的工具链接已失效,但从VS2017 15.7开始,此功能已失效。

注意:这仅更新NuGet引用机制。它不会更改为新的csproj类型


有一个神奇的工具可以自动将使用packages.config或project.json的项目转换为PackageReference

  • 将其安装到VisualStudio

  • 安装扩展后,打开解决方案并右键单击 在解决方案资源管理器中选择解决方案,然后单击“升级到软件包” 参考资料

  • 选择该选项后,项目将被转换,如下所示。强烈建议您在启用源代码管理的目录上执行此操作,以便在出现问题时可以轻松撤消


  • 有一个很棒的工具可以自动将csproj转换为新的SDK格式:


    当然,它不会转换ASP.NET项目,因为这些项目不支持新的SDK格式。所有其他项目都很有魅力。

    有一个
    尝试转换
    工具buil
    
    dotnet tool install -g try-convert
    
    try-convert -p MyProject.csproj