gpt4 book ai didi

.net - netstandard2.0 (.net standard 2.0) 类库无法引用 net461 (.net Framework 4.6.1) 类库

转载 作者:行者123 更新时间:2023-12-02 23:54:51 29 4
gpt4 key购买 nike

首先,如果之前有人问过这个问题,我们深表歉意。我查了又查,有很多相互矛盾和过时的信息,因为netstandard2.0已经发布了。

我正在学习新的 netstandard 和核心迁移,并使用 CLI dotnet 命令构建了空的普通“hello world”项目。有 Nuget 引用资料。

问题是添加从 netstandard2.0 类库到 net461 类库的引用会导致错误(netstandard2.0 --> net461 引用)

"cannot be added due to incompatible targeted frameworks between the two projects. Please review the project you are trying to add and verify that is compatible with the following targets"

Rich Lander 的这篇微软文章声称我可以使用 netstandard2.0 做到这一点

https://blogs.msdn.microsoft.com/dotnet/2017/06/28/announcing-net-core-2-0-preview-2/#user-content-reference-net-framework-libraries-from-net-standard

Immo Landwerth [MSFT] 在他的文章中似乎暗示了通过兼容性垫片的可能性,我相信这可能仅通过 Nuget 引用:

https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/

enter image description here

(也许 Scott Hanselman 可以提供帮助!)

看来netsandard2.0支持net461,“.NET实现支持”网格表明了这一点。

https://learn.microsoft.com/en-us/dotnet/standard/net-standard

示例代码

已创建一个 GitHub 存储库来演示这一点

https://github.com/raxuser100/net_standard_references.git https://github.com/raxuser100/net_standard_references/tree/master

克隆上面的 master 并从命令提示符运行它:

dotnet add .\classlib_netstandard2.0_ref_classLib_net461\classlib_netstandard2.0_ref_classLib_net461.csproj reference .\classlib_net461\classlib_net461.csproj

然后您将收到错误消息。

csproj 文件具有以下内容classlib_net461.csproj

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
</PropertyGroup>
</Project>

classlib_netstandard2.0.csproj

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>

CLI DotNet 命令脚本

我使用下面的 CLI 命令来创建项目结构:

dotnet new console --name console_core2.0 --framework netcoreapp2.0
dotnet new classlib --name classlib_netstandard2.0 --framework netstandard2.0
dotnet new classlib --name classlib_net461 --target-framework-override net461

# netstandard2.0 --> net461 link
dotnet new classlib --name classlib_netstandard2.0_ref_classLib_net461 --framework netstandard2.0

<#
add project a reference
netstandard2.0 --> net461 link

this returns an error

cannot be added due to
incompatible targeted frameworks between the two projects. Please review the project you are trying to add and verify that is compatible with the following targets:
At line:1 char:1


Works if we edit classlib_net461.csproj and add multiple targets including netstandard2.0

<PropertyGroup>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
</PropertyGroup>


#>
dotnet add .\classlib_netstandard2.0_ref_classLib_net461\classlib_netstandard2.0_ref_classLib_net461.csproj reference .\classlib_net461\classlib_net461.csproj

向 classLib_net461 添加多个目标的解决方法

如果我们编辑 classlib_net461.csproj 并添加包括 netstandard2.0 在内的多个目标,则可以工作

classlib_net461.csproj

<PropertyGroup>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
</PropertyGroup>

现在,当我们引用时,它工作正常,如下所示:

classlib_netstandard2.0_ref_classLib_net461.csproj

<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\classlib_net461\classlib_net461.csproj" />
</ItemGroup>

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>

这是否有效,因为现在两个类库都以 netstandard2.0 为目标

问题

  • 有没有一个简单的图表可以用简单的术语来揭开所有这些问题的神秘面纱!

  • 为什么这不起作用。如果一个空的 netstandard2.0 实现了 net461 的大部分功能,那么它肯定拥有支持裸 net461 引用所需的一切。我知道有一些 api 不起作用,即 WPF,但是这些都是裸项目,没有 Nuget 或直接二进制引用。

  • 解决方法,为什么会这样?我们是否总是需要在 classlib 中同时针对 net461 和 netstandard2.0,以便它们只能被 netstandard2.0 classlib 引用。

  • 在 netstandard2.0 类库中使用旧版 .net 框架类库(net4.3 及以上)的正确结构是什么。

  • 这是如何运作的?

    https://blogs.msdn.microsoft.com/dotnet/2017/06/28/announcing-net-core-2-0-preview-2/#user-content-reference-net-framework-libraries-from-net-standard

    enter image description here

最佳答案

对 .NET Standard 2.0+ 和 .NET Core 2.0+ 项目引用 .NET Framework 库的支持当前仅限于 NuGet 包(通过特殊的后备定义),这就是为什么它不适用于您的项目-项目引用。

当 MSBuild 为此使用相同的解决策略时,这可能会在即将推出的工具版本中发生变化。请参阅this tracking GitHub issue .

关于.net - netstandard2.0 (.net standard 2.0) 类库无法引用 net461 (.net Framework 4.6.1) 类库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50156863/

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