C# 为什么';Xamarin是否允许在Android上使用某些文件名?

C# 为什么';Xamarin是否允许在Android上使用某些文件名?,c#,android,xamarin,xamarin.forms,xamarin.android,C#,Android,Xamarin,Xamarin.forms,Xamarin.android,我注意到,如果您有一个图像文件(png或svg,也可能是非图像文件),并希望将其重命名为default.png,public.svg,等等,那么Android将抛出一个编译器错误,其中包含无效符号:[文件名]。我在某个地方读到,这是因为这些是C#保留关键字。我不明白的是,为什么这些关键字与文件名有关,为什么它们似乎只是在安卓系统上引起问题,而不是在其他平台上。这是一个bug还是设计的?这是“设计的” 在构建过程中,首先运行一个名为Android资产打包工具(aapt和aapt2)的工具,该工具生

我注意到,如果您有一个图像文件(png或svg,也可能是非图像文件),并希望将其重命名为
default.png
public.svg
,等等,那么Android将抛出一个编译器错误,其中包含
无效符号:[文件名]
。我在某个地方读到,这是因为这些是C#保留关键字。我不明白的是,为什么这些关键字与文件名有关,为什么它们似乎只是在安卓系统上引起问题,而不是在其他平台上。这是一个bug还是设计的?

这是“设计的”

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

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

public static int public=0x7f020023;
Xamarin还通过自动生成的
Resource.designer.cs
文件将这些值映射到C#world,从而

public const int public = 2130837539;
在Java/C#文件中使用这些语言关键字作为变量名会导致编译错误