【问题标题】:In Visual Studio, is it possible to target a .NET 4.x CLR but a 2.0 class library API?在 Visual Studio 中,是否可以针对 .NET 4.x CLR 但针对 2.0 类库 API?
【发布时间】:2019-10-15 16:06:00
【问题描述】:

当您在 Visual Studio 中选择 C# 项目的目标框架时,实际上您一次选择了三个不同的东西(据我了解)。

选择 .NET 4.7.2 将选择:

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

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

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

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

【问题讨论】:

    标签: c# .net visual-studio unity3d


    【解决方案1】:

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

    <LangVersion>8.0</LangVersion>
    

    CLR 和 BCL 版本……很复杂。你真的在这里瞄准一个TFM。听起来你想要(再次,在 csproj 中)

    <TargetFramework>netstandard2.0</TargetFramework>
    

    实际的 CLR(运行时)由运行它的任何东西决定,而不是由库决定。但是你可以多目标,如果这变得有用的话,即

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-31
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多