2011-05-11 81 views
2

我目前正在研究一個項目,其源代碼應儘可能便攜;也就是說,該項目(在C#中,但它不是非常相關)表示應該在Android(使用Mono-Android),iPhone(使用MonoTouch)和WinMobile(使用官方Compact Framework)上執行的應用程序。沒有深入細節,相應的MSBuild解決方案由一個獨立平臺庫(至少從源代碼的角度來看)組成,它聲明各種接口和類,這些接口和類表示每種功能的抽象,而不是各種平臺所共有的即UI)。此外,還有一個相應的庫(專門針對每個平臺)「基礎庫」;有效的應用程序可執行文件是使用抽象和通用標準庫的程序。多平臺MSBuild項目文件

在WinMobile和Android上開發並不是一個真正的問題:Mono-Android外接程序可以安裝在VS 2010上,所以兩個平臺都可以使用MS VS來處理。

最初該解決方案是在VS中創建的,因此初始配置和相關項目(Android和WinMobile)會自動生成。

之後,我將解決方案導入到Mac(MonoTouch正式支持的唯一平臺)下的MonoDevelop中,並且爲iPhone庫創建了該項目;切換配置以生成程序集(iPhoneSimulator),「基礎庫」由於缺少項目類型配置而無法編譯;具體來說,MonoTouch使用的<ProjectTypeGuids>的GUID是{E613F3A2-FE9C-494F-B74E-F63BCB86FEA6};添加這個GUID我現在可以在MonoDevelop中編譯「基礎庫」。

當我嘗試在VS中重新導入解決方案時出現問題:由於沒有Windows版本的MonoTouch,因此VS無法找到指定項目類型的加載項,並且項目無法加載。

看看MSBuild項目文件的規範,似乎有很多選項無法在VS中的項目/解決方案編輯器中設置或修改;但是格式非常複雜,現在我要求你的幫助!

是否有一種方法可以在項目文件中指定項目類型僅在獨立選擇某個特定配置的情況下存在於我正在使用的環境中?

回答

0

我通過排除在Linux和Windows之間顯示爲怪異的文件,解決了跨平臺開發中無關但非常相似的問題。我有我的項目在源代碼控制下,並利用它來保持協同工作。 http://www.aydabtudev.com/2011/05/what-goes-into-source-control-android.html

對於您的問題,這不是一對一的問題,但它可能會爲您提供關於如何解決問題的線索/想法。

3

一般的做法是這樣的;這progressivly建立你的財產,任何參考值的條件已經財產可能有:

<ProjectTypeGuids 
    Condition="'$(BuildingInsideVisualStudio)' != 'true'" 
    >;{E613F3A2-FE9C-494F-B74E-F63BCB86FEA6}"</ProjectTypeGuids> 
<ProjectTypeGuids>{OTHER-GUIDS-HERE}$(ProjectTypeGuids)</ProjectTypeGuids> 

這將檢測VS條件(建築物時),並省略unkonwn GUID。但我不確定在項目開放時它是否可以工作,這個屬性可能只適用於建築。在Mono上可能會有類似的「高級」財產,你可以改變這種狀況。

+2

我知道這已經很舊了,但我想指出,如果使用msbuild構建,這會失敗。 'BuildingInsideVisualStudio'只會在從IDE本身構建時觸發。這可能會在構建服務器上出現問題,例如直接從命令行運行msbuild。 – julealgon 2014-12-30 20:31:42