如何将 .NET 标准库更改为 .NET 框架库?

How can I change a .NET standard library to a .NET framework library?

我正在为 C# 中的简单解析器编写 class 库。当我第一次创建它时,我使用的是 .NET 标准 2.0,但现在我需要将它迁移到 .NET 4.6,以符合我解决方案中的其他项目并使用 NUnit。

我尝试按照说明进行操作 in the Microsoft documentation,但是当我尝试 select 属性中的另一个框架时,我只能找到其他 .NET 标准版本。

我该如何迁移它?我需要手动编辑 .csproj 文件吗?

打开项目文件 (.csproj) 并将 TargetFramework 更改为 net462

<PropertyGroup>
  <TargetFramework>net462</TargetFramework>
</PropertyGroup>

如果您要将 class 库作为 Nuget 包发布,则有更好的设置方法。查看这篇文章:

https://weblog.west-wind.com/posts/2017/Jun/22/MultiTargeting-and-Porting-a-NET-Library-to-NET-Core-20

基本上,您可以为多目标设置 class 库,允许将其导入 .net 核心项目以及不同版本的 .net 框架。

我在 Visual Studio 2017 年的个人经验是 重新创建项目并添加现有源 是最简单、最安全和最有效的方法 - 因为基于 .Net Framework 的 csproj 文件有额外的 xml 元素(与基于标准的相比),似乎改变 "TargetFramework" 是不够的。 以下是默认出现的差异部分:


有几个步骤是我做过的,对我有用:

  1. git push 你的代码,所以你有备份:)
  2. 在 VS 中卸载项目(右键单击项目并卸载)
  3. 在 VS 中编辑项目(右键单击并编辑)
  4. 将 TargetFramework OR/AND TargetFrameworkVersion 替换为 <TargetFramework>netcoreapp2.0</TargetFramework>

  5. 将项目行(通常是第一行(在 xml root 之后)更改为: <Project Sdk="Microsoft.NET.Sdk">

  6. 删除通常是第二行的导入(在 xml 根之后)

  7. 如果需要,请保留描述构建选项的 PropertyGroup(我希望我的是自定义的)
  8. 删除引用和文件引用,它们不需要。
  9. 关闭文件并重新加载(右键单击重新加载)。
  10. 删除不需要的 assemblyinfo 文件(从属性文件夹中),程序集版本现在来自项目
  11. 右键单击项目并转到属性,可以看到您的项目文件没有任何错误。确保您没有拼写错误或不接近的标签。
  12. 建立。如果您有缺少的依赖项,请右键单击项目并添加它们。 - 我想你不想在项目中编辑它们。或者您可以根据需要执行 dotnet restore 或 dotnetbulid 来添加它们。

希望这对你有用。看似步骤很多,其实并不复杂,而且是一次性的。