2016-09-18 45 views
4

我想構建一個.net核心庫,它將具有用於執行win32和osx調用的平臺特定代碼,並且在編譯每個目標os的庫時,我想包括正確的操作系統代碼。dot網絡核心構建平臺/ os特定代碼或類文件

我看過corefx和大量文檔,經過大量搜索後,我發現的唯一方法是在運行時執行操作系統檢測,但這既低效又乏味。在corefx的情況下,他們有一個複雜的構建系統,似乎自動拉入平臺特定的文件,但依賴於msbuild等等。我錯過了什麼嗎?

如何有條件目標代碼的操作系統無論是在文件級或代碼級別,例如:

#if osx 
// come code 
#endif 

或者,按照golangs方式,通過將操作系統名稱的文件名,例如MyClass的。 osx.cs用於osx代碼,MyClass.cs用於非平臺的東西,構建過程將包含正確的文件本身。

我正在使用Visual Studio代碼和project.json。

(我想在Visual Studio中我可以定義每個平臺的目標,包括我自己的定義,但我在OSX)提前

感謝。

回答

1

你可以在你的project.json定義生成定義

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

如:

{ 
    "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" 
      } 
     } 
    } 
} 

現在,您可以有條件地編譯針對目標:

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

Source

+0

th這正是我所期待的。謝謝。當我最初問這個問題時,你鏈接的文檔也不存在。 – Damien