2016-09-18 6 views
4

Ich möchte eine .net-Kernbibliothek erstellen, die plattformspezifischen Code für win32- und osx-Aufrufe hat, und wenn ich die Bibliothek für jedes Ziel os kompiliere, möchte ich einbeziehen der korrekte Betriebssystemcodedot net core build platform/os spezifischer Code oder Klassendateien

Ich habe mir die Corefx und viele Dokumente angesehen und nach vielem Googeln ist die einzige Möglichkeit, die OS-Erkennung zur Laufzeit durchzuführen, aber das ist sowohl ineffizient als auch mühsam. Im Falle von Corefx haben sie ein komplexes Build-System, das plattformspezifische Dateien automatisch zu ziehen scheint, aber auf Msbuild und mehr angewiesen ist. Fehle ich etwas?

Wie kann ich Zielcode bedingt für ein O entweder auf Dateiebene oder Code-Ebene, wie:

#if osx 
// come code 
#endif 

Oder wie pro golangs Art und Weise, indem Sie den o Namen im Dateinamen wie MyClass setzen. osx.cs für osx-code und MyClass.cs für nicht-plattform-stuff und der build-prozess benötigt die richtigen dateien selbst.

Ich verwende Visual Studio-Code und project.json.

(Ich denke, in Visual Studio ich jede Plattform Ziel definieren könnte und sind meine eigene definiert, aber ich bin auf osx)

Vielen Dank im Voraus.

Antwort

1

Sie könnten eine Builddefinition in Ihrer project.json definieren

"buildOptions": { 
       "define": [ "PORTABLE328" ] 
      } 

zB:

{ 
    "frameworks":{ 
     "netstandard1.6":{ 
      "dependencies":{ 
       "NETStandard.Library":"1.6.0", 
      } 
     }, 
     ".NETPortable,Version=v4.0,Profile=Profile328":{ 
      "buildOptions": { 
       "define": [ "PORTABLE328" ] 
      }, 
      "frameworkAssemblies":{ 
       "mscorlib":"", 
       "System":"", 
       "System.Core":"", 
       "System.Net" 
      } 
     } 
    } 
} 

Jetzt können Sie bedingt kompilieren gegen dieses Ziel:

#if !PORTABLE328 
using System.Net.Http; 
using System.Threading.Tasks; 
// Potentially other namespaces which aren't compatible with Profile 328 
#endif 

Source

+0

th Ich war genau das, wonach ich suchte. Vielen Dank. Als ich die Frage ursprünglich gestellt habe, existierten die Dokumente, die du verlinkt hast, nicht. – Damien

Verwandte Themen