我可以将这个旧的 csproj 迁移到 VS2017 csproj 吗?

Posted

技术标签:

【中文标题】我可以将这个旧的 csproj 迁移到 VS2017 csproj 吗?【英文标题】:Can I migrate this old csproj to VS2017 csproj? 【发布时间】:2019-05-08 00:15:58 【问题描述】:

我想简化我的 PCL csproj,但我似乎找不到合适的 TargetFrameworks..

这是我的旧csproj:

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>D035A2E6-EF3E-4F50-B6D7-396F83FE313F</ProjectGuid>
    <ProjectTypeGuids>786C830F-07A1-408B-BD7F-6EE04809D6DB;FAE04EC0-301F-11D3-BF4B-00C04F79EFBC</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <RootNamespace>PCL.Acme</RootNamespace>
    <AssemblyName>PCL.Acme</AssemblyName>
    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
    <TargetFrameworkProfile>Profile151</TargetFrameworkProfile>
  </PropertyGroup>

当前的 nuget 有一个框架文件夹,其格式类似于 portable46-net451%2Bwin81%2Bwpa81。 我无法定位 netstandard1.2,因为我依赖于另一个 PCL...

感谢任何帮助。

更新

这种 csproj 格式可以引用我的旧 PCL nuget 包。 现在我可以开始迁移PCL.Acme.Another.Library 项目了。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netstandard1.2</TargetFrameworks>
    <PackageId>PCL.Acme</PackageId>
    <Authors>Acme</Authors>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <PackageTargetFallback>
      $(PackageTargetFallback);portable46-net451+win81+wpa81
    </PackageTargetFallback>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="PCL.Acme.Another.Library" Version="1.0.0" />
  </ItemGroup>
</Project>

【问题讨论】:

there is a tool that converts the csproj files 由于 PCL 库方法已停用,您现在必须选择 .NETStandard。如果您对另一个 PCL 有任何依赖项,您还应该将依赖项迁移到 .NETStandard,然后重新添加该 nuget。montemagno.com/… 嗨@LeoLiu-MSFT,很遗憾,我们正在讨论许多需要迁移到.NetStandard (1.2) 的项目。有没有一种方法可以迁移而不是一次更改所有内容?也许在 1 个包中同时具有 PCL 和 .NetStandard 兼容程序集?我们目前创建了一个单独的 .NetStandard 项目,我们将所有代码移入其中。然后将文件链接回 PCL 项目中......? .NetStandard 项目尚未打包.. 【参考方案1】:

我会用新格式重新创建 csproj(重新开始),这样会容易得多。这篇博文真的很有帮助https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/

编辑:所有支持的目标框架https://docs.microsoft.com/en-us/dotnet/standard/frameworks

编辑2:

<PackageTargetFallback>
    $(PackageTargetFallback);portable-net45+win8+wpa81+wp8
</PackageTargetFallback>

可能也有帮助。更多信息在这里https://docs.microsoft.com/en-us/dotnet/core/tools/csproj

如果链接断开

类库

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>
</Project>

控制台应用

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>
</Project>

测试项目

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
    <PackageReference Include="xunit" Version="2.2.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
  </ItemGroup>
</Project>

【讨论】:

Edit2 成功了!现在我可以自上而下地支持我的 PCL 库 nuget 并将它们一一移动到 NetStandard。我会更新我的问题。

以上是关于我可以将这个旧的 csproj 迁移到 VS2017 csproj 吗?的主要内容,如果未能解决你的问题,请参考以下文章

WPF 应用程序使用新的 csproj 格式

VS2017 csproj 没有 ItemGroup 标签

[.NET Core 24]把project.json迁移到.csproj

VS2017如何升级csproj文件

防止VS向csproj添加显式编译标签

.NET Core项目从xproj+project.json向csproj迁移简介