如何创建多个构建配置文件

时间:2012-02-27 08:05:36

标签: xamarin.ios monodevelop xamarin.android

我们正在为Windows Phone开发游戏,并希望将其移植到Android和iOS。当然,我们希望只保留一个源代码库。话虽如此,我想知道MonoDevelop是否允许在单个解决方案中定义多个构建配置文件,即Windows Phone的构建配置文件,Android的构建配置文件以及iOS的构建配置文件。

任何帮助都会非常感激。谢谢, J3D

2 个答案:

答案 0 :(得分:2)

嗯,是的,没有。

你不能做的是拥有一个项目MyGame.csproj的MyGame.sln解决方案,并拥有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等,那么您应该能够重用所有代码并链接到文件。那么你在这里要做的是为每个平台创建一个项目(和库项目),并简单地链接文件。

答案 1 :(得分:1)

Matthew的解决方案是正确的,但我想详细说明解决方案和项目配置。

MonoDevelop中的解决方案和项目构建配置的工作方式与Visual Studio完全相同。解决方案可以针对其项目可以针对的任何事物的混合物。但是,您要定位的每个平台都需要特殊的项目类型,因此单个项目无法定位到多个平台。但是,您的解决方案可以包含多个项目,每个项目都针对不同的平台它还可以包含包含这些项目的共享代码的库。

假设您有一个包含四个项目的解决方案:

  1. SharedLibrary
  2. MonoForAndroidProject
  3. MonoTouchProject
  4. WindowsPhoneProject
  5. 假设每个项目都具有这些项目类型的默认项目配置。

    您的解决方案配置,您在工具栏中的配置选择器中看到的内容,可以是您想要的任何内容 - 名称没有特殊意义。它们中的每一个都可以映射到项目和项目配置的任何集合(或子集)。

    例如,您可以使用四种调试配置:

    1. DebugIPhone :映射到 Debug | AnyCPU 配置 SharedLibrary ,以及 Debug | iPhone 配置 MonoTouchProject
    2. DebugIPhoneSimulator :映射到 Debug> AnyCPU SharedLibrary 的配置,以及 MonoTouchProject的 | iPhoneSimulator配置 < / LI>
    3. DebugAndroid :映射到 Debug | AnyCPU SharedLibrary 的配置, Debug | AnyCPU 配置 MonoForAndroidProject
    4. DebugWinPhone :映射到 Debug> AnyCPU SharedLibrary 的配置, Debug | AnyCPU 配置 WindowsPhoneProject
    5. 另一个例子,您可以使用Release配置来构建所有设备包:发布| AnyCPU 配置 SharedLibrary 发布| iPhone 配置 MonoTouchProject 发布| AnyCPU 配置 MonoForAndroidProject 发布| AnyCPU 配置 WindowsPhoneProject < / em>的

      您还可以将特定于目标的项目配置添加到SharedLibrary,并定义符号以影响源代码中的#if指令,并将这些配置映射到相应的解决方案配置中,尽管这与配置单个配置不兼容为所有设备构建。

      现在你会遇到上述解决方案的一些问题。

      首先,MonoDevelop无法加载和构建Windows Phone项目,Visual Studio无法加载和构建MonoTouch项目。因此,在将其加载到任一IDE时会出现错误 - 但其他项目仍然有效。

      其次,没有所有项目类型都可以引用的库类型。你可能能够逃脱使用,例如一个MfA库项目,并将其作为来自其他项目类型的dll引用。另一种可能性是拥有包含相同文件的多个库项目 - 这些项目可以位于同一目录中,并且就地包含相同的文件,或者它们可以位于不同的位置并将文件包含为文件链接。您可以使用Visual Studio项目链接器使它们保持同步。

      有些人更喜欢拥有多个解决方案文件,每个平台一个。你有很大的灵活性:

      • 他们可以包括相同的项目,或单独的项目,或混合
      • 他们的项目可以包括(或链接)相同的文件,不同的文件或混合
      • 它们可以位于相同的目录中,也可以具有单独的目录或混合