Ho creato una libreria di classi .NET Nucleo R2 avere qualche codice comune che uso per diverse piattaforme. Parte del codice non è valida nella piattaforma .Net Core e quindi desidero avvolgerlo attorno a un simbolo di compilazione condizionale. Ho cercato in internet per vedere se riuscivo a trovare un simbolo built-in (come Silverlight per applicazioni Silverlight e WINFX_CORE per Windows 8 le app), ma non sono riuscito a trovare tutte le informazioni così ho deciso di creare il mio proprio simbolo. Anche questo non sembra funzionare.Compilazione Condizionale simbolo per Net Nucleo Class Library
Da tutto quello che ho letto l'aggiunta e l'utilizzo di un simbolo dovrebbe essere facile, basta aggiungere un valore ai simboli di compilazione condizionale nelle proprietà del progetto | Scheda Build. L'ho fatto ma sembra funzionare. Qui ci sono uno schermo paio di colpi ...
Si noti che ho aggiunto un valore NET_CORE
nel simbolo compilazione condizionale, ma quando lo uso nel codice il codice non viene ignorato.
1) Qualcuno sa se esiste un simbolo integrato per la piattaforma .Net Core (sto usando R2)?
2) Se non c'è uno, quello che sto facendo di sbagliato creare il mio simbolo?
Il file .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: ero in grado di risolvere questo utilizzando il link nella risposta fornita. Ecco i dettagli ...
Originariamente il file project.json
si presentava così ...
{
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"frameworks": {
"netstandard1.5": {
"imports": "dnxcore50"
}
},
"buildOptions": {
"defines": [ "NET_CORE" ]
}
}
Ho risolto il problema modificando a questo ...
{
"frameworks": {
"netstandard1.5": {
"imports": "dnxcore50",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"buildOptions": {
"define": [ "NET_CORE" ]
}
}
}
}
il simbolo compilazione condizionale potrebbe essere limitata a una determinata configurazione/piattaforma di build. Ispeziona il Configuration Manager e costruisci le proprietà "(Tutte le configurazioni/piattaforme)" – dlatikay
Possibile duplicato di [Come impostare .NET Core nell'istruzione #if per la compilazione] (http://stackoverflow.com/questions/38476796/how-to- set-net-core-in-se-dichiarazione-per-compilazione) –