【问题标题】:How to removed "Unknown" images from Xamarin Forms iOS Asset Catalog如何从 Xamarin Forms iOS 资产目录中删除“未知”图像
【发布时间】:2021-07-05 11:41:08
【问题描述】:
在为 Xamarin Forms iOS 应用程序更新资产目录中的图像时,有时我会在图像集中显示额外的图像,有时正确的图像未分配给正确的 @1x、@2x 等。我也得到有时当我尝试将我的图像更改合并到我的项目版本之间时。我无法清除这些图像,并且当您在资产目录中右键单击这些图像时,没有取消分配的选项。即使通过 Visual Studio IDE 从资产目录中删除图像集似乎也无法正常工作,因为我开始收到一些编译时错误,即在 Assets.xcasstes 文件夹中找不到图像文件。任何想法如何正确合并/处理这种情况?我不希望手动重新更新项目的第二个版本(即分支)中的图像。
【问题讨论】:
标签:
xamarin.forms
xamarin.ios
asset-catalog
【解决方案1】:
因此,使用以下步骤,我能够清理东西,但这是一个非常手动的过程。仍在寻找一种在分支之间合并 iOS 图像的好方法。以下步骤适用于 PC 上的 VS 2019。
仅供参考 - 如果您的项目是受版本控制的,我建议在每次更改后执行检查。
- 进入包含“未知”图像的图像集并取消任何设置
实际设置的图像。 (您可以通过右键单击
图像并从弹出菜单中选择取消设置。)保存项目/
完成此操作后的资产。
- 一旦取消设置所有图像并且您只能看到图像集中的“未知”图像,请在左侧窗格中选择图像集名称,然后单击资产管理器窗口左上角区域附近的删除按钮。再次保存项目。
- 在解决方案资源管理器中单击 iOS 项目,然后选择解决方案资源管理器窗口顶部工具栏中的“显示所有文件”选项。您现在应该会在您的 iOS 项目下看到一个名为 Assets.xcassets 的文件夹。
- 展开 Assets.xcassets 文件夹并确保您没有看到您删除的图像集的文件夹。例如,如果您删除名为“help”的图像集,请确保在 Assets.xcassets 文件夹下看不到名为 help.imageset 的文件夹。如果您确实看到刚刚删除的图像集的文件夹,则可能需要手动进入文件资源管理器并从磁盘驱动器中删除该文件夹。
- 一旦图片集的文件夹不再存在于 Assets.xcassets 文件夹中,我强烈建议您清理整个项目。
- 接下来右键单击 iOS 项目并从弹出菜单中选择“卸载项目”。
- 卸载项目后,XXX.iOS.csproj 文件(其中 XXX 是您的项目的名称)应该会在 Visual Studio 编辑器中自动打开。您现在需要在此 csproj 文件中搜索您删除的图像集名称的所有实例,并删除您找到的所有 XML 条目。例如,如果我删除了“config”图像集,并且在我的 csproj 文件中找到了以下条目,我将删除所有 XML 条目。 注意:我无法在此处实际显示 XML,因此我将其放在单独的答案中,以便所有人都能看到。
重要! - 另外 - 确保在 Assets.xcassets 下的文件夹中确保没有 Images.imageset 文件夹,除非您实际使用名为 Images 的资产图像集。否则删除此文件夹并确保 iOS.csproj 文件中未引用该文件夹/文件。
-
从不再属于资产目录的图像中删除所有条目后,保存 iOS csproj。然后鼠标右键单击解决方案中的 iOS 项目并选择“重新加载项目”。
-
您现在应该能够重新编译项目而不会出现错误。记住 - 经常将您的项目签入到您的版本控制系统,尤其是此时。
-
现在您可以返回资产目录并重新添加所需的图像集。
在此之后一切都应该正常工作。
【解决方案2】:
所以由于某种原因,我无法让我在上面发布的 XML 代码实际显示,所以我将尝试在此处发布。
<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 节点。