Xamarin.forms “如何删除”;“未知”;来自Xamarin Forms iOS资产目录的图像

Xamarin.forms “如何删除”;“未知”;来自Xamarin Forms iOS资产目录的图像,xamarin.forms,xamarin.ios,asset-catalog,Xamarin.forms,Xamarin.ios,Asset Catalog,在为Xamarin Forms iOS应用程序更新资产目录中的图像时,有时会在图像集中显示额外的图像,有时会将正确的图像分配给正确的@1x、@2x等。有时,当我尝试将对图像的更改合并到项目版本之间时,也会出现这种情况。我无法清除这些图像,当您右键单击资产目录中的这些图像时,没有取消分配的选项。甚至通过Visual Studio IDE从资产目录中删除图像集似乎也无法正常工作,因为我随后开始出现一些编译时错误,在Assets.xcastes文件夹中找不到图像文件。如何正确地合并/处理这种情况?我不

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

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

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

  • 进入包含“未知”图像的图像集并取消设置任何图像 实际设置的图像。(您可以通过在中单击鼠标右键来执行此操作。) 图像并从弹出菜单中选择unset。)保存项目/ 完成此操作后的资产
  • 一旦所有图像都已取消设置,并且您仅在图像集中看到“未知”图像,请在左侧窗格中选择图像集名称,然后单击资产管理器窗口左上方区域附近的删除按钮。再次保存项目
  • 单击解决方案资源管理器中的iOS项目,并在解决方案资源管理器窗口顶部工具栏中选择“显示所有文件”选项。现在,您应该在iOS项目下看到一个名为Assets.xcsets的文件夹
  • 展开Assets.xcsets文件夹,确保未看到已删除图像集的文件夹。例如,如果删除名为“help”的图像集,请确保在Assets.xcsets文件夹下看不到名为help.imageset的文件夹。如果确实看到刚删除的图像集的文件夹,则可能需要手动进入文件资源管理器并从磁盘驱动器中删除该文件夹
  • 一旦Assets.xAssets文件夹中不再存在图像集的文件夹,我强烈建议清理整个项目
  • 接下来右键单击iOS项目,并从弹出菜单中选择“卸载项目”
  • 卸载项目后,XXX.iOS.csproj文件(其中XXX是项目的名称)应在Visual Studio编辑器中自动打开。现在,您需要在这个csproj文件中搜索您删除的图像集名称的所有实例,并删除找到的任何XML条目。例如,如果我删除了“config”映像集,并且在csproj文件中找到了以下条目,那么我将删除所有XML条目注意:我无法在此处实际显示XML,因此我将其放在单独的答案中,以便每个人都能看到。
  • 重要!!-另外-确保在Assets.xAssets下的文件夹中,确保没有Images.imageset文件夹,除非您实际使用名为Images的资产图像集。否则,请删除此文件夹,并确保iOS.csproj文件中未引用该文件夹/文件

  • 从不再属于资产目录的图像中删除所有条目后,保存iOS csproj。然后用鼠标右键单击解决方案中的iOS项目并选择“重新加载项目”

  • 您现在应该能够重新编译项目,而不会出现错误。请记住——经常将项目签入到版本控制系统中,尤其是此时

  • 现在,您可以返回资源目录并重新添加所需的图像集


  • 在这一点之后,一切都应该正常工作。

    因此,出于某种原因,我无法将上面发布的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标记—在本例中,它将是config imageset中每个文件的整个ImageAsset XML节点