在Visual Studio中,是否可以针对.NET 4.x CLR,但以2.0类库API为目标?



当你在Visual Studio中选择C#项目的目标框架时,你实际上同时选择了三个不同的东西(据我所知(。

选择 .NET 4.7.2 将选择:

  • 语言版本(例如 C# 7.2(
  • CRL(公共语言运行时(版本(例如 4.5(
  • 和 BCL(基类库(版本(例如 4.7.2(

现在,是否可以以某种方式独立配置这些东西?我知道有依赖项,但针对较低的 BCL API 应该有效,对吧?

原因是:我的项目是在 Unity3D 应用程序中使用的 C# 类库。Unity 有一个 4.x(兼容(CLR,但让我们在 .NET Standard 2.0 API 和 4.x 之间进行选择。通常,以 2.0 为目标是有意义的,因为它更小,并且 4.x 不适用于 Unity 支持的所有平台。

如果我能在Visual Studio中复制这个配置,那就太好了。否则,我可能会不小心在我的 dll 代码中进行无效(即> 2.0(API 调用,并且只有在代码崩溃时才会发现在 Unity 中出现"找不到类/函数"。

语言版本可以通过 csproj 中的<LangVersion>完全独立设置,即

<LangVersion>8.0</LangVersion>

CLR 和 BCL 版本是 ...复杂。您在这里真正瞄准的是TFM。听起来像你想要(再次,在 csproj 中(

<TargetFramework>netstandard2.0</TargetFramework>

实际的 CLR(运行时(由运行它的内容确定,而不是由库决定。但是你可以多目标,如果这变得有用,即

<TargetFrameworks>netstandard2.0;net472</TargetFrameworks>

并为不同的平台配置不同的依赖项和#if等,以充分利用每个平台。Unity 是否可以正确使用多目标包是另一个问题,我无法回答。

您可以随时编辑 csproj;您不受模板生成内容的约束。

相关内容

最新更新