gpt4 book ai didi

.net - 从完整框架项目中引用 .NET 5.0 程序集?

转载 作者:行者123 更新时间:2023-12-03 14:06:17 24 4
gpt4 key购买 nike

我们所有的产品(WPF 应用程序)仍然使用 v4.6.1,这有点落后于时代。我目前正在使用 .NET 5,并将我们的一个类库(由许多这些产品使用)转换为 v5。我现在试图从我们的一个较小的产品中引用这个程序集,但它没有构建,有很多错误,例如:

Dependency "System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".1> Could not resolve this reference. Could not locate the assembly "System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"


我的印象是 .NET 5 向后兼容,还是仅适用于 .NET Standard? (TBH 我一直在努力理解整个 .NET Standard/Core 的事情)。
我们还不想冒险将产品转换为 .NET 5 - 这是一项长期战略。当我们开始时,将上述类库转换为准备好会很好,那么 .NET 框架解决方案有什么方法可以引用 .NET 5 程序集?我猜这是不可能的,唯一的选择是多目标?如果是这样,我该怎么做,它会回到 v4.6.1 吗?或者我们是否坚持将所有内容同时转换为 .NET 5 的“大爆炸”方法?
不确定它是否相关,但在类库的 \bin\debug\ 文件夹中,我可以看到各种子文件夹,例如 net5.0net5.0-windowsnet472netstandard2.1 - 仅包含 067914 的 067914 DLL如果这是最低限度,我们也许可以使用 4.7.2,但我一开始不知道如何进行多目标。在“目标框架”下拉列表中,我只看到 .NET 5.0、.NET Core 3.0、.NET Core 3.1。
编辑 1
我按照下面卡米洛的建议替换为:
<TargetFrameworks>net5.0-windows;net461</TargetFrameworks>
现在,代码不会构建。看一个例子,它似乎在提示它可以找到 .Net5 但不是 4.6.1 的类型“ItemsControl”:
enter image description here
我假设我需要以某种方式为 v4.6.1 添加 System.Windows.Controls,尽管这充其量是不直观的 - 因为在 .Net 框架应用程序中没有添加引用 -> 程序集窗口。我假设这现在必须通过 NuGet 完成,如果是这样,我需要哪个包?

最佳答案

.NET Standard 2.0 是最后一个与 .NET Framework 兼容的目标框架。 .NET Standard 2.1 只是 .NET Core 3.0 和更新版本。 .NET 5 与 .NET 5 和更新版本(当它们出来时)兼容。
请注意,WPF 端口在 .NET Core 3.0 中可用,这就是为什么您不能定位低于它的任何版本。
让我们看看一些选项:

  • 类库包含实用程序类、配置和类似的东西,它们与框架无关。

  • 该库应面向 .NET Standard 2.0:
    <TargetFramework>netstandard2.0</TargetFramework>
  • 类库有一些依赖框架的引用(比如WPF),想要多目标。

  • 该库将同时面向 .NET Framework 4.6.1 和 .NET 5:
    <TargetFrameworks>net461;net5.0</TargetFrameworks>
    请注意,您可能需要在许多地方添加 #if 指令,例如(但是,不要在标识符上引用我):
    #if NET461 // something that only exists in .NET Framework 4.6.1
    #elif NET50 // something that only exists in .NET 5.0
    #endif
    您可能面临的另一个问题是在其中一个目标中找不到引用。在这种情况下,您可以有条件地导入引用(您可以查看类的 Microsoft Docs 文档以找到它所在的库),如下所示:
    <ItemGroup Condition="'$(TargetFramework)' == 'net461'">
    <Reference Include="PresentationCore" />
    </ItemGroup>
  • 类库有一些依赖于框架的引用(如 WPF),但您不想多目标或到处放置预处理器指令。

  • 创建第二个项目,仅针对 .NET 5,复制可以重复使用的代码部分,然后从头开始无法移动的部分。

    关于.net - 从完整框架项目中引用 .NET 5.0 程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65407023/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com