如何从 Xamarin Forms iOS 资产目录中删除 "Unknown" 图像

How to removed "Unknown" images from Xamarin Forms iOS Asset Catalog

在为 Xamarin Forms iOS 应用更新资产目录中的图像时,我有时会在图像集中显示额外的图像,有时正确的图像没有分配给正确的@1x,@ 2x 等。有时,当我尝试将对我的图像的更改合并到我的项目版本之间时,我也会遇到这种情况。我一直无法清除这些图像,当您右键单击资产目录中的这些图像时,没有取消分配的选项。即使通过 Visual Studio IDE 从资产目录中删除图像集似乎也无法正常工作,因为我随后开始遇到一些编译时错误,即无法在 Assets.xcasstes 文件夹中找到图像文件.任何想法如何正确合并/处理这种情况?我不想手动重新更新我项目的第二个版本(即分支)中的图像。

所以使用下面的步骤,我能够清理东西,但这是一个非常手动的过程。仍在寻找在分支之间合并 iOS 图像的好方法。以下步骤适用于 PC 上的 VS 2019。

仅供参考 - 如果您的项目受版本控制,我建议在每次更改后执行签入。

  1. 进入包含 'unknow' 个图像的图像集并取消任何设置 实际设置的图像。 (您可以通过右键单击 image 和 selecting 从弹出菜单中取消设置。)保存项目 / 完成后的资产。
  2. 一旦取消设置所有图像并且您只能看到图像集中的 'unknown' 个图像,select 左侧窗格中的图像集名称,然后单击左上角附近的删除按钮资产管理人手区window。再次保存项目。
  3. 单击解决方案资源管理器中的 iOS 项目,然后 select 解决方案资源管理器顶部工具栏中的 'Show all files' 选项 window。您现在应该会在 iOS 项目下看到一个名为 Assets.xcassets 的文件夹。
  4. 展开 Assets.xcassets 文件夹并确保您看不到您删除的图像集的文件夹。例如,如果您删除名为 'help' 的图像集,请确保您在 Assets.xcassets 文件夹下看不到名为 help.imageset 的文件夹。如果您看到刚刚删除的图像集的文件夹,您可能需要手动进入文件资源管理器并从磁盘驱动器中删除该文件夹。
  5. 一旦图像集的文件夹不再存在于 Assets.xcassets 文件夹中,我强烈建议您清理整个项目。
  6. 接下来右键单击 iOS 项目,然后从弹出菜单中单击 select 'Unload Project'。
  7. 项目卸载后,XXX.iOS.csproj 文件(其中 XXX 是您的项目名称)应该会在 Visual Studio 编辑器中自动打开。您现在需要搜索此 csproj 文件以查找您删除的图像集名称的所有实例,并删除找到的所有 XML 条目。例如,如果我删除了 'config' 图像集并在我的 csproj 文件中找到以下条目,我将删除所有 XML 条目。 注意:我无法让 XML 实际显示在这里,所以我把它放在一个单独的答案中,这样每个人都可以看到。

重要!! - 此外 - 确保在 Assets.xcassets 下的文件夹中没有 Images.imageset 文件夹,除非您实际使用名为 Images 的资产图像集。否则删除此文件夹并确保文件夹/文件未在 iOS.csproj 文件中引用。

  1. 从不再属于资产目录的图像中删除所有条目后,保存 iOS csproj。然后右键单击解决方案中的 iOS 项目和 select 'Reload Project'.

  2. 您现在应该可以重新编译项目而不会出现错误。请记住 - 经常将您的项目签入您的版本控制系统,尤其是在此时。

  3. 现在您可以返回资产目录并重新添加所需的图像集。

此后一切都应该正常工作。

所以出于某种原因,我无法让我在上面 post 编辑的 XML 代码实际显示,所以我将尝试在此处 post 它。

<ImageAsset Include="Assets.xcassets\config.imageset\config.png">
  <Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\config.imageset\config@2x.png">
  <Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\config.imageset\config@3x.png">
  <Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\config.imageset\Contents.json">
  <Visible>false</Visible>
</ImageAsset>

<ItemGroup>
  <ImageAsset Include="Assets.xcassets\Images.imageset\qrbuttonlight32.png">
    <Visible>false</Visible>
  </ImageAsset>
</ItemGroup>
<ItemGroup>
  <ImageAsset Include="Assets.xcassets\Images.imageset\qrbuttonlight64.png">
   <Visible>false</Visible>
  </ImageAsset>
</ItemGroup>
<ItemGroup>
  <ImageAsset Include="Assets.xcassets\Images.imageset\qrbuttonlight96.png">
   <Visible>false</Visible>
  </ImageAsset>
</ItemGroup>

您需要确保删除完整的 XML 标签 - 在这种情况下,它将是配置图像集中每个文件的整个 ImageAsset XML 节点。