Xamarin.ios 如何创建多个构建概要文件

Xamarin.ios 如何创建多个构建概要文件,xamarin.ios,monodevelop,xamarin.android,Xamarin.ios,Monodevelop,Xamarin.android,我们正在为Windows Phone开发一款游戏,并希望将其移植到Android和iOS。当然,我们希望只保留一个源库。话虽如此,我想知道MonoDevelop是否允许在单个解决方案中定义多个构建配置文件,即Windows Phone的构建配置文件、Android的构建配置文件和iOS的构建配置文件 任何帮助都将不胜感激。谢谢 j3d是的,不是的 你不能做的是用一个项目MyGame.csproj创建一个解决方案MyGame.sln,并拥有像iOS、Android和WP这样的构建目标 但是,您需要

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

任何帮助都将不胜感激。谢谢 j3d是的,不是的

你不能做的是用一个项目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 <--/

但是,如果您使用的是MonoGame之类的,那么您应该能够重用所有代码,只需链接到文件。因此,您在这里要做的是为每个平台创建一个项目(以及库项目),并简单地链接文件。

Matthew的解决方案是正确的,但我想详细介绍一下解决方案和项目配置

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

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

  • 共享图书馆
  • 单孔虫工程
  • 单点接触项目
  • WindowsPhone项目
  • 假设每个项目都具有这些项目类型的默认项目配置

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

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

  • 调试iPhone:映射到SharedLibrary的调试| AnyCPU配置和MonoTouchProject的调试| iPhone配置
  • 调试iPhoneSimulator:映射到SharedLibrary的调试| AnyCPU配置和MonotTouchProject的调试| iPhoneSimulator配置
  • DebugAndroid:映射到SharedLibrary的Debug | AnyCPU配置和Monoforandroid项目的Debug | AnyCPU配置
  • DebugWinPhone:映射到SharedLibrary的Debug | AnyCPU配置和WindowsPhone项目的Debug | AnyCPU配置
  • 另一个例子是,您可以有一个构建所有设备包的发布配置:SharedLibrary的发布| AnyCPU配置,MonoTouchProject的发布| iPhone配置,MonoForAndroidProject的发布| AnyCPU配置,WindowsPhoneProject的发布| AnyCPU配置

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

    现在,使用上述解决方案,您会遇到一些问题

    首先,MonoDevelop无法加载和生成Windows Phone项目,Visual Studio无法加载和生成MonoTouch项目。因此,在将其加载到任一IDE时都会出现错误,但其他项目仍然可以工作

    其次,没有一个库类型可以供所有项目类型引用。例如,您可以使用MfA库项目,并从其他项目类型将其作为dll引用。另一种可能是有多个包含相同文件的库项目-这些项目可以位于同一目录中,并包含相同的文件,或者它们可以位于不同的位置,并将文件作为文件链接包含。您可以使用VisualStudio项目链接器使它们保持同步

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

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

    我们已经有一些库(例如引擎、网络、人工智能等),因此我们可以将它们保持为使用VisualStudio编译的库,然后使用非共享代码创建其他库,对吗?这是正确的,但您必须为每个平台重新编译。-我想。也就是说,创建一个Android类库项目、一个iOS类库项目文件和一个WP类库项目文件。您可以使用相同的代码文件-只是链接。谢谢您的评论。正如您所说,问题在于MonoDevlop无法加载WP项目,VisualStudio无法加载MonoDroid/MonoTouch项目。此外,为每个平台提供一个解决方案要容易得多,也就是说,在为不同的目标平台使用不同的IDE时,不需要几十种配置,也没有问题。另一方面,有一个引用另一个解决方案来源的解决方案
    -- 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