В многозадачном проекте мне доступны только ресурсы более ограничительной структуры?
Предположим, у меня есть многоцелевой проект, что-то вроде этого:
<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 ответ
Когда вы нацеливаетесь на несколько платформ, вы должны использовать условные ссылки и символы препроцессора для работы с функциями, которые не поддерживаются всеми целевыми платформами.
Допустим, вы нацелены на.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
}
Полную документацию по фреймворкам с несколькими целями можно найти здесь:
Целевые рамки | Документы Microsoft