0

假设我有一个多目标项目,如下所示:

<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 没有我正在使用的某些功能,它怎么可能编译?

非常感谢。

4

1 回答 1

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
}

多目标框架的完整文档可以在这里找到:
目标框架 | 微软文档

于 2019-02-08T20:01:05.830 回答