2012-02-27 65 views
1

我們正在開發適用於Windows Phone的遊戲,並希望將其移植到Android和iOS。當然,我們只想保留一個單一的來源基地。話雖如此,我想知道MonoDevelop是否允許在單個解決方案中定義多個構建配置文件,即Windows Phone的構建配置文件,Android的構建配置文件以及iOS構建配置文件。如何創建多個生成配置文件

任何幫助將非常感激。謝謝, j3d

回答

2

嗯,是的,沒有。

你不能做的是有一個解決方案MyGame.sln與一個項目MyGame.csproj並具有像iOS,Android和WP的構建目標。

但是,您需要做的是: 創建一個包含許多項目的解決方案:MyGame.Android.csproj,MyGame.iOS.csproj,MyGame.WP.csproj。但在你失望之前,你可以使用完全相同的代碼文件 - 只需將它們添加爲鏈接文件即可。

每個平臺不是構建目標,而是一個單獨的應用程序。就像您無法在iOS上運行Android應用程序一樣,您無法爲多個平臺編譯項目。就像你不能在Silverlight中使用普通的類庫一樣,你不能在Windows Phone上使用Android庫。但是沒有任何東西阻止你使用相同的代碼文件。

所以,你要做的是:

-- MyGame.sln 
-- -- Game.Android.csproj 
-- -- -- CoolFile.cs <--\ 
-- -- Game.iOS.csproj | 
-- -- -- CoolFile.cs <--| - these are the same files 
-- -- Game.WP.csproj | 
-- -- -- CoolFile.cs <--/ 

如果你的遊戲需要大量的文件,它可能是更容易的文件分割成一個庫:

-- MyGame.Android.sln 
-- -- Game.Android.csproj 
-- -- -- Activity1.cs     Not shared (different on each platform) 
-- -- Game.SharedLibrary.Android.csproj 
-- -- -- CoolFile.cs      Shared code file 

-- MyGame.iOS.sln 
-- -- Game.iOS.csproj 
-- -- -- ViewController1.cs    Not shared (different on each platform) 
-- -- Game.SharedLibrary.iOS.csproj 
-- -- -- CoolFile.cs      Shared code file 

但是,如果你正在使用MonoGame等,那麼你應該能夠重用所有的代碼,並鏈接到文件。所以你要做的是爲每個平臺創建一個項目(和庫項目),並簡單地鏈接這些文件。

+0

我們已經有一些圖書館(如引擎,網絡,人工智能等),因此,我們可以讓他們與VisualStudio中和編譯那麼只需使用非共享代碼創建額外的庫,對吧? – j3d 2012-02-27 09:56:02

+0

這是正確的,但您將不得不爲每個平臺重新編譯。 - 我認爲。即,創建一個Android類庫項目,一個iOS類庫項目文件和一個WP類庫項目文件。你可以使用相同的代碼文件 - 只是鏈接。 – Matthew 2012-02-27 13:19:57

1

馬修的解決方案是正確的,但我想詳細闡述解決方案和項目配置。

MonoDevelop中的解決方案和項目構建配置的工作方式與Visual Studio完全相同。解決方案可以針對其項目可以定位的任何混合物。但是,您定位的每個平臺都需要特殊的項目類型,因此單個項目無法定位到多個平臺。但是,您的解決方案可以包含多個項目,每個項目都針對不同的平臺它也可以包含包含這些項目的共享代碼的庫。

假設你有一個包含四個項目的解決方案:

  1. SharedLibrary
  2. MonoForAndroidProject
  3. MonoTouchProject
  4. WindowsPhoneProject

假設每一個都有默認的項目配置這些項目類型。

您的解決方案配置,您在工具欄中的配置選取器中看到的內容可以是您想要的任何內容 - 名稱沒有特殊意義。他們每個人都可以映射到項目和項目配置的任何集合(或子集)。

例如,你可以有四個調試配置:

  1. DebugIPhone:映射到調試| AnyCPU配置SharedLibrary調試的| iPhone配置MonoTouchProject
  2. DebugIPhoneSimulator:映射到調試| AnyCPU的配置SharedLibrary和調試| iPhoneSimulator配置MonoTouchProject
  3. DebugAndroid:映射到調試| AnyCPU配置 SharedLibrary調試| AnyCPU配置 MonoForAndroidProject
  4. DebugWinPhone:映射到調試| AnyCPU配置爲SharedLibrary調試| AnyCPU配置 WindowsPhoneProject

另一個例子,你可以有一個生成所有的器件封裝的發佈配置:發佈| AnyCPU配置SharedLibrary發佈| iPhone配置MonoTouchProject發佈| AnyCPU配置MonoForAndroidProject發佈|任何CPU配置的WindowsPhoneProject

您也可以將特定於目標的項目配置添加到SharedLibrary,其中定義的符號會影響源代碼中的#if指令,並將這些符號映射到適當的解決方案配置中,但這不會與單個配置爲所有設備構建。

現在你會遇到上述解決方案的幾個問題。

首先,MonoDevelop無法加載和構建Windows Phone項目,並且Visual Studio無法加載和構建MonoTouch項目。所以當你將它加載到任何一個IDE時都會出現錯誤 - 但其他項目仍然可以正常工作。其次,沒有所有項目類型可以引用的庫類型。您可能能夠逃脫使用例如。一個MfA庫項目並將其引用爲其他項目類型的dll。另一種可能是將多個庫項目包含相同的文件 - 這些項目可能位於相同的目錄中,並且包含相同的文件,或者它們可能位於不同的位置,並將文件包含爲文件鏈接。您可以使用Visual Studio項目鏈接程序使其保持同步。

有些人更喜歡擁有多個解決方案文件,每個平臺一個。你有很大的靈活性:

  • 它們可以包括相同的項目,或單獨的項目,或混合
  • 他們的項目可以包括(或鏈接)相同的文件或不同的文件,或混合
  • 他們可以在同一個目錄中,或有單獨的目錄,或A將
+0

感謝您的意見。正如你所說的問題是,MonoDevlop無法加載WP項目,而VisualStudio無法加載MonoDroid/MonoTouch項目。此外,爲每個平臺提供解決方案要容易得多,即不需要有十幾種配置,並且在爲不同的目標平臺使用不同的IDE時沒有問題。另一方面,有一個解決方案引用另一個解決方案的源代碼並不是那麼優雅...... – j3d 2012-02-29 07:58:54