Ich habe eine .Net Core R2-Klassenbibliothek erstellt, die einen gemeinsamen Code enthält, den ich für verschiedene Plattformen verwende. Ein Teil des Codes ist in der .NET Core-Plattform nicht gültig. Daher möchte ich ein bedingtes Kompilierungssymbol umschließen. Ich suchte zuerst im Internet nach einem integrierten Symbol (wie SILVERLIGHT für Silverlight-Apps und WINFX_CORE für Windows 8-Apps), konnte jedoch keine Informationen finden und entschloss mich, ein eigenes Symbol zu erstellen. Das scheint auch nicht zu funktionieren.Bedingtes Kompilierungssymbol für .NET-Kernklassenbibliothek
Von allem, was ich lese, Hinzufügen und Verwenden eines Symbols sollte einfach sein, fügen Sie einfach einen Wert zu den Conditional Compilation Symbole in den Projekteigenschaften | Registerkarte erstellen Ich habe das getan, aber es scheint zu funktionieren. Hier sind ein paar Screenshots ...
Beachten Sie, dass ich einen NET_CORE
Wert in dem Conditional Compilation Symbol hinzugefügt, aber wenn ich es im Code verwenden wird der Code nicht außer Acht gelassen werden.
1) Weiß jemand, ob es ein eingebautes Symbol für die .Net Core-Plattform gibt (ich verwende R2)?
2) Wenn es keinen gibt, was mache ich falsch, wenn ich mein eigenes Symbol erstelle?
Die .xproj Datei:
<?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: Ich konnte dies den Link in der vorgesehenen Antwort mit lösen. Hier sind die Details ...
Ursprünglich war die project.json
Datei so aussah ...
{
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"frameworks": {
"netstandard1.5": {
"imports": "dnxcore50"
}
},
"buildOptions": {
"defines": [ "NET_CORE" ]
}
}
ich das Problem gelöst, indem sie diese zu ändern ...
{
"frameworks": {
"netstandard1.5": {
"imports": "dnxcore50",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"buildOptions": {
"define": [ "NET_CORE" ]
}
}
}
}
die bedingte Kompilierung Symbol kann begrenzt werden zu einer bestimmten Build-Konfiguration/Plattform. Überprüfen Sie den Konfigurationsmanager und erstellen Sie die Eigenschaften "(Alle Konfigurationen/Plattformen)" – dlatikay
Mögliches Duplikat von [Festlegen von .NET Core in der #if-Anweisung für die Kompilierung] (http://stackoverflow.com/questions/38476796/how-to- set-net-core-in-if-Anweisung zur Kompilierung –