我能否将这个旧的csproj迁移到VS2017 csproj?

4

我希望简化我的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的framework文件夹。 因为我依赖于另一个PCL,所以无法针对netstandard1.2进行目标定位...

任何帮助都将不胜感激。

更新

这个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>

1
有一个工具可以将csproj文件转换为Vs2017格式,它的链接是:https://github.com/hvanbakel/CsprojToVs2017。 - magicandre1981
自从PCL库被淘汰后,您现在必须选择一个.NETStandard。如果您有任何对另一个PCL的依赖,则还应迁移该依赖项到.NETStandard,然后将其nuget添加回来。https://montemagno.com/how-to-convert-a-pcl-library-to-net-standard-and-keep-git-history/ - Leo Liu
嗨@LeoLiu-MSFT,不幸的是,我们正在谈论需要迁移到.NetStandard(1.2)的许多项目。有没有一种方法可以进行迁移而不是一次性更改所有内容?也许在一个包中同时拥有PCL和.NetStandard兼容的程序集?我们目前正在创建一个单独的.NetStandard项目,将所有代码移动到其中。然后将文件链接回PCL项目...?.NetStandard项目尚未打包.. - grmbl
1个回答

2
我建议您重新创建使用新格式的csproj文件,这会更容易。这篇博客文章非常有帮助:https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/ 更新:所有支持的目标框架请参考https://learn.microsoft.com/en-us/dotnet/standard/frameworks 更新2:
<PackageTargetFallback>
    $(PackageTargetFallback);portable-net45+win8+wpa81+wp8
</PackageTargetFallback>

可能也会有所帮助。更多信息请参见https://learn.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。我会更新我的问题。 - grmbl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接