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

Posted

技术标签:

【中文标题】如何将 .NET 标准库更改为 .NET 框架库?【英文标题】:How can I change a .NET standard library to a .NET framework library? 【发布时间】:2021-12-31 22:14:20 【问题描述】:

我正在为 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。 【参考方案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】:

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

    git push你的代码,所以你有一个备份:) 在VS中卸载项目(右键项目并卸载) 在VS中编辑项目(右键编辑)

    将 TargetFramework OR/AND TargetFrameworkVersion 替换为 &lt;TargetFramework&gt;netcoreapp2.0&lt;/TargetFramework&gt;

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

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

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

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

【讨论】:

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

以上是关于如何将 .NET 标准库更改为 .NET 框架库?的主要内容,如果未能解决你的问题,请参考以下文章

将目标框架从 .NET 3.5 更改为 .NET 4.0

如何确定 .net 框架版本以创建库 [重复]

如何使用多个目标框架测试 .NET 库

从 .Net 标准项目中使用 .Net Core 库

c ++ 11 getline询问两次输入

为啥将我的目标框架从“.NET Framework 4 Client Profile”更改为“.NET Framework 4”会出现警告消息?