在多目标项目中,我只有可用的更具约束性的框架的资源吗?

时间:2019-02-08 19:31:04

标签: c# .net multitargeting

假设我有一个多目标项目,诸如此类:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <PackageId>Bugsnag</PackageId>
    <Title>Bugsnag .NET Notifier</Title>
    <TargetFrameworks>net35;net40;net45;netstandard1.3;netstandard2.0</TargetFrameworks>
  </PropertyGroup>
</Project>

我的目标是net35,net40,net45等。 Net40具有net35所没有的功能,而net45具有net40所没有的功能。

所以我的疑问是,在编写应用程序代码时,我是否可以使用net45的所有功能?如果确实如此,例如,如果net35没有我正在使用的某些功能,那么如何编译?

非常感谢。

1 个答案:

答案 0 :(得分:2)

以多个框架为目标时,必须使用条件引用和预处理器符号来使用并非所有目标框架都支持的功能。

假设您以.NET 4.0和4.5为目标:

<PropertyGroup>
  <TargetFramework>net40;net45</TargetFramework>
</PropertyGroup>

如果您具有使用框架4.5而不是4.0的可选依赖项,则可以在项目中有条件地引用它:

<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
  <Reference Include="Referenced.Assembly.Name" />
</ItemGroup>

您可能还需要使用它为每个框架引用不同版本的依赖关系。

在代码中,您可以使用预处理器符号来确保较新的框架功能在针对较旧的框架进行构建时不会引发错误:

public void Example()
{
#if NET45
    // Implementation that uses the 4.5 framework
#else
    // Implementation that uses the 4.0 framework
#endif
}

有关多目标框架的完整文档,请参见:
Target Frameworks | Microsoft Docs