【问题标题】:How can I change a .NET standard library to a .NET framework library?如何将 .NET 标准库更改为 .NET 框架库?
【发布时间】:2024-01-19 05:06:01
【问题描述】:

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

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

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

【问题讨论】:

  • 您使用的是哪个版本的 Visual Studio?
  • Visual Studio 专业版 2017
  • 有趣的是,您说“现在我需要将其迁移到 .NET 4.6 以符合我的解决方案中的其他项目并使用 NUnit”。为什么需要迁移?通常 NUnit 可以很好地与 .NET Standard 配合使用(尽管托管 NUnit 测试用例的程序集可能需要以 net46 为目标)。
  • The NUnit docs 表示测试所在的程序集必须是 .NET 框架或 .NET 核心。 4.6是因为解决方案里有6个项目,我的只是其中一个(其他都是4.6)
  • .netstandard 的重点是不必这样做。为什么有人会针对一个漏洞百出并很快必须更新到 4.6.1 的框架版本是一个相当神秘的问题。相反,修复它,将其升级到 4.7.1。

标签: c# .net .net-standard .net-framework-version .net-4.6


【解决方案1】:

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

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

【讨论】:

  • 我找不到任何csproj 文件
  • 导航到包含您的项目的文件夹。
  • @NithinChandran:卸载项目,右键项目选择编辑
  • 虽然这在技术上确实使它针对 4.6.2 构建,但它确实不会根据 OP “迁移”任何东西。事实上,这可能会给您带来更多不同的问题。
  • 让我没有任何问题,这正是我想要的。感谢您提供完美的简单解决方案!
【解决方案2】:

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


【讨论】:

  • 这家伙是对的。比接受的答案有更多的变化。
  • 这是对的——不要按照公认的答案去做。您可能会打乱您的项目并浪费大量时间。恕我直言。
  • 同意,不要只更改 xml 中的目标框架——还有很多东西需要进入它来“迁移”任何东西!从解决方案中删除现有项目,重命名文件夹,在同一位置创建一个具有相同名称的新项目,将文件复制回来,将它们添加到项目中,添加您的引用。两分钟,超级安全,超级简单。
【解决方案3】:

如果您将类库发布为 Nuget 包,那么有一种更好的设置方法。看看这篇文章:

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

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

【讨论】:

  • 不错。这应该是一个更广为人知的特性。不知道为什么 MS 没有通过直接在 UI 上允许多选来使其更加明确。
【解决方案4】:

我做了几个步骤并为我工作:

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

  5. 将项目行,通常是第一行(在 xml 根目录之后)更改为: &lt;Project Sdk="Microsoft.NET.Sdk">

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

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

希望这对你有用。它们看起来有很多步骤,但它们并不复杂,这是一次努力。

【讨论】:

  • 我试过这个,项目甚至不会再加载了。我收到错误“元素 下的元素 无法识别。”也无法构建。
  • 看起来您正在以另一种方式转换,从 .NETFramework 到 ,NETStandard - 无论哪种方式,这样做都会出错...