为什么Xamarin不允许在Android上使用某些文件名?

use*_*392 1 c# android xamarin.android xamarin xamarin.forms

我注意到,如果你有一个图像文件(PNG或SVG和可能的非图像文件也是如此),并希望其重命名为default.png,public.svg等等,那么Android将抛出一个编译器错误使用Invalid symbol: [file name].我在某处读过这是因为这些是C#保留关键字.我不明白的是为什么这些关键字与文件名有关,以及为什么它们似乎只是在Android而不是其他平台上引起问题.这是一个bug还是设计?

Sus*_*ver 7

这是"按设计"......

在构建过程中,首先运行一个名为Android Asset Packaging Tool(aaptaapt2)的工具,该工具生成一个名为R.java将资源名称映射到int值的Java文件.(注意:aapt | 2是谷歌Android工具,而不是MSFT/Xamarin工具)

因此,一个可绘制的名称public.png会在R.java文件中生成如下内容:

public static int public=0x7f020023;
Run Code Online (Sandbox Code Playgroud)

并且这些值也由Xamarin通过自动生成的Resource.designer.cs文件映射到C#世界,因此

public const int public = 2130837539;
Run Code Online (Sandbox Code Playgroud)

在Java/C#文件中使用这些语言关键字作为变量名将导致编译错误.