2013-06-05 53 views
10

我遇到了xamarin文件夹的问题。目前我正在写xamarin iOS项目。在Xcode中,我使用了用于分组图像的目录,可能存在几个级别的嵌套文件夹,但是当我为设备或iOS模拟器构建项目时,这些资源仅仅被复制到主包中,没有任何文件夹结构。我无法在xamarin studio中达到相同的行为。每当我在我的项目中创建文件夹并将图片或其他资源放入其中时,此文件夹结构就会在实际设备上重新创建,因此,我在加载图像时会遇到不同的路径。我怎样才能让xamarin工作室简单地将文件夹中的文件复制到主包,而不是重新创建文件夹结构?iOS项目中的Xamarin工作室文件夹结构问题

感谢您的帮助。

+0

FWIW,Xcode的“文件夹”不是真正的文件夹,它们只是文件分组,并不反映磁盘上的文件结构。 Xamarin Studio不支持这种虚拟文件分组的概念,因此使用子文件夹并不像您期望的那样工作。但是,在Xcode中使用真实文件夹的工作方式与Xamarin Studio中的文件夹相同。 – jstedfast

回答

15

我的第一个建议是将图片的BuildAction属性更改为BundleResource

一旦你这样做,也有实现目标的多种方式:

第一个选项是指定一个LogicalName是你想要的名称是编译的应用程序包的里面什么。目前没有办法设置Resource ID(UI名称为LogicalName财产)超过EmbeddedResource文件以外的任何其他(我会在固定的工作,暂时),但你可以编辑* .csproj的,像这样:

<BundleResource Include="Icons\icon.png"> 
    <LogicalName>icon.png</LogicalName> 
</BundleResource> 

通常,Icons\icon.png文件将作为Icons/icon.png复制到iOS应用程序包中,但是,LogicalName属性将覆盖相对路径名。在这种情况下,它将被复制为简单的icon.png

再举一个例子,你也可以这样做:

<BundleResource Include="Icons\iOS\icon.png"> 
    <LogicalName>AppIcon.png</LogicalName> 
</BundleResource> 

这将Icons\iOS\icon.png文件复制到iOS应用程序包的根,也是其重命名为AppIcon.png

第二种选择是将您的图像文件简单地移动到Resources文件夹中。 Resources文件夹是一个特殊的目录,当拷贝到iOS应用程序包时,它将从默认路径名称中除去。换句话说,Resources\icon.png将作为icon.png而不是Resources\icon.png复制到iOS应用程序包的根目录中,就像正常项目目录中的情况一样。

第三个选项是简单地注册自己的其他“资源”目录(并且它们可以存在于其他目录中,包括默认资源目录)。

例如,你可以有结构在您的项目:

Resources/ 
    Icons/ 
     icon.png 
     [email protected] 

而在你的* .csproj的文件,编辑以下标签:

<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix> 

,取而代之的是:

<IPhoneResourcePrefix>Resources;Resources\Icons</IPhoneResourcePrefix> 

这将确保icon.png和[email protected]文件安装在iOS应用程序包的根目录中。

+0

在6月19日你编辑答案后,我没有注意到你的答案。从那时起已经过去了近6个月:))我刚刚看到了这个。真的很棒的回答!谢谢! – kyurkchyan

+0

这里记录的所有BTW都在哪里?我真的很想念Xcode的运行脚本构建阶段,我正在寻找在构建过程中做各种各样的东西的理智方法。 –

+0

这是一个很好的答案 - 它帮助我清理我的资源文件夹。谢谢! – Ender2050

1

Xamarin有两种方式你想存在于iOS的捆绑安装文件:

  1. 把它们放在任何文件夹中,并标注“建设行动”为“内容”。无论你的项目中有什么目录结构都会出现在主包中。
  2. 将它们放在“Resources”文件夹中,并将“Build Action”作为“BundleResource”,与#1相同,但从包中的路径中删除“Resources”文件夹。这是一个很好的地方,可以将你想要的所有图像放在你的包的根目录下,但会混乱你的项目。
+0

是的,但我如果我把一些文件夹内的资源文件夹,他们也复制到捆绑。所以唯一的办法是只收集一个文件夹中的所有图像?多么愚蠢的事情。 – kyurkchyan

+0

我没有按照你想要的。你想在项目中有一个文件夹结构,但在包中有一个扁平结构吗? – jonathanpeppers

+0

是的!就像它在Xcode中一样。我使用它们的资源组或文件夹,但无论如何内容都是以平面结构复制的。 – kyurkchyan