Я создал библиотеку классов .Net Core R2, имеющую некоторый общий код, который я использую для нескольких разных платформ. Некоторые из кода недействительны на платформе .Net Core, поэтому я хочу обернуть его вокруг условного символа компиляции. Сначала я искал в Интернете, чтобы узнать, могу ли я найти встроенный символ (например, SILVERLIGHT для приложений Silverlight и WINFX_CORE для Windows 8), но не смог найти какую-либо информацию, поэтому решил создать свой собственный символ. Это тоже не работает.Условный символ компиляции для библиотеки .Net Core Class
Из всего, что я прочитал, добавление и использование символа должно быть простым, просто добавьте значение в символы условной компиляции в свойствах проекта | Построить вкладку. Я сделал это, но он работает. Вот несколько снимков экрана ...
Обратите внимание, что я добавил значение NET_CORE
в условной компиляции символ, но когда я использую его в коде код не игнорируется.
1) Кто-нибудь знает, есть ли встроенный символ для платформы .Net Core (я использую R2)?
2) Если нет, то что я делаю неправильно, создавая свой собственный символ?
.xproj файл:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>253184d7-9b42-4233-a871-8cfa3ee9e83e</ProjectGuid>
<RootNamespace>Linq2Db.NetCore</RootNamespace>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>
UPDATE: я был в состоянии решить эту проблему с помощью ссылки в поставленном ответ. Вот подробности ...
Первоначально файл project.json
выглядел так ...
{
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"frameworks": {
"netstandard1.5": {
"imports": "dnxcore50"
}
},
"buildOptions": {
"defines": [ "NET_CORE" ]
}
}
Я решил проблему, изменив его на это ...
{
"frameworks": {
"netstandard1.5": {
"imports": "dnxcore50",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"buildOptions": {
"define": [ "NET_CORE" ]
}
}
}
}
символ условной компиляции может быть ограничено к определенной конфигурации/платформе сборки. Проверьте конфигурационный менеджер и свойства сборки "(Все конфигурации/платформы)" – dlatikay
Возможный дубликат [Как установить .NET Core в инструкции #if для компиляции] (http://stackoverflow.com/questions/38476796/how-to- нетто-ядро-в-зор-Условный оператор-для-компиляции) –