Error XA1041 de .NET para Android

Mensajes de ejemplo

error XA1041: The MSBuild property 'MonoAndroidAssetPrefix' has an invalid value of 'c:\Foo\Assets'. The value is expected to be a directory path representing the relative location of your Assets or Resources.
error XA1041: The MSBuild property 'MonoAndroidResourcePrefix' has an invalid value of 'c:\Foo\Resources'. The value is expected to be a directory path representing the relative location of your Assets or Resources.

Cuestión

El problema es que se espera que tanto MonoAndroidAssetPrefix como MonoAndroidResourcePrefix sean rutas de directorio relativas. Esta información se utiliza para eliminar la información del directorio raíz del activo o recurso cuando empaquetamos la aplicación. El error se produce porque la propiedad contiene una ruta completa.

Por ejemplo, considere la siguiente estructura.

Foo.csproj
MyAssets/
    Foo.txt
    Subfolder/
        Bar.txt
MainActivity.cs

En el archivo final .apk esperamos que los archivos Foo.txt y Bar.txt se coloquen en la carpeta assets. Para hacerlo correctamente, el sistema de compilación debe conocer el name de la carpeta en la que se encuentran los recursos. De forma predeterminada, es "Assets", pero también debería admitirse cualquier otro nombre de carpeta.

En el ejemplo anterior, esperamos que el usuario establezca en MonoAndroidAssetPrefix un valor de "MyAssets". Esto garantizaría que durante el empaquetado se elimine la parte 'MyAssets' en la ruta de acceso a 'Foo.txt', etc. Si se establece /Users/xxx/Foo/MyAssets en MonoAndroidAssetPrefix o c:\Users\xxx\Foo\MyAssets verá este mensaje de error.

Solución

La solución para esto es no usar una ruta completa para los valores de MonoAndroidAssetPrefix o MonoAndroidResourcePrefix. Deben ser rutas de directorio relativas que coincidan con la ruta de la carpeta en la que se almacenan tus recursos.