【问题标题】:Xamarin studio folder structure issue in iOS projectiOS项目中的Xamarin Studio文件夹结构问题
【发布时间】:2013-06-01 01:18:03
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

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

标签: ios xamarin.ios xamarin xamarin-studio


【解决方案1】:

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

一旦你这样做了,就有多种方法可以实现你的目标:

第一个选项是将LogicalName 指定为您希望在已编译应用程序包中包含的任何名称。目前,除了EmbeddedResource 文件之外,无法设置Resource ID(LogicalName 属性的UI 名称)(我将立即修复该问题),但您可以像这样编辑*.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
      icon@2x.png

在您的 *.csproj 文件中,编辑以下标签:

<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>

并将其替换为:

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

这将确保 icon.png 和 icon@2x.png 文件安装在 iOS 应用程序包的根目录中。

【讨论】:

  • 抱歉,您在 6 月 19 日编辑了答案后,我没有注意到您的答案。从那时起已经过去了将近 6 个月 :)) 我刚刚看到这个。真的很棒的答案!谢谢!
  • 所有这些记录在案的顺便说一句在哪里?我真的很怀念 Xcode 的运行脚本构建阶段,我正在寻找在构建过程中做各种事情的合理方法。
  • 这是一个很好的答案 - 它帮助我清理了我的资源文件夹。谢谢!
  • 如果您同时使用 Mac 上的 Xamarin Studio 和 Windows 上的 VS,则需要在 &lt; IPhoneResourcePrefix&gt; 中同时拥有这两种组合:&lt;IPhoneResourcePrefix&gt;Resources;Resources/Icons;Resources\Icons&lt;/IPhoneResourcePrefix&gt;
  • 您实际上只需要“Resources\Icons”(更新了我的答案),因为 Xamarin Studio 会将其转换为 Mac 上的 Unix 路径。
【解决方案2】:

Xamarin 有两种方法来设置您希望在 iOS 包中显示的文件:

  1. 将它们放在任何文件夹中,并将“构建操作”标记为“内容”。您在项目中的任何目录结构都将出现在主包中。
  2. 将它们放在“Resources”文件夹中,将“Build Action”设置为“BundleResource”,这与 #1 相同,但会从包中存在的路径中删除“Resources”文件夹。这是一个将您想要的所有图像放在包的根目录中的好地方,但会弄乱您的项目。

【讨论】:

  • 是的,但是如果我将一些文件夹放在资源文件夹中,它们也会被复制到捆绑包中。所以唯一的方法就是将所有图像收集在一个文件夹中???多么愚蠢的事情。
  • 我没有遵循你想要的。你想在项目中有一个文件夹结构,但在 bundle 中有一个平面结构吗?
  • 没错!就像在 Xcode 中一样。我使用资源组或它们的文件夹,但无论如何,内容都以扁平结构复制到捆绑包中。
  • 在 Xamarin Studio 中使用解决方案文件夹。这些是文件系统中不存在的虚拟文件夹。
  • 如何添加解决方案文件夹?右键单击项目时上下文菜单中唯一可用的是新建文件夹,它添加了普通文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 2022-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 2014-07-09
相关资源
最近更新 更多