我在生成Resource.Designer但不再编译的项目构建期间经常遇到问题。我的搜索引擎显示我并不是唯一一个遇到此问题的人,但我也没有找到任何可靠的解决方案"当它发生时。
例如,现在我有一个工作正常的项目,但是如果我添加对NuGet库(我创建的)的引用,那么应用程序将不再编译,因为Resource.Designer.cs中存在大量错误
在另一个项目中,我只是升级了Xamarin Forms,现在我再也无法编译了,因为Resource.Designer.cs中出现了大量错误。
当然,最直接的问题是"如何修复这些项目中的错误"但实际上我想了解这里的根本原因。是什么导致Resource.Designer生成和重新生成?使用什么算法来决定将哪些项目放入该文件?为什么我们经常最终得到一个生成的文件然后无法实际编译?为什么没有得到这些项目所需的参考文献?
我真的很想从根本上理解这一点,这样一旦我越过当前的事情让我头疼,我可以在将来再次出现时避免它(我肯定会提出来的)再次)。
答案 0 :(得分:5)
Resource.Designer.cs
与Android中的R.java
同义。当然,应用程序的资源由生成的常量Resource ID
引用。
这些项目通常在Xamarin.Android
的{{1}}通过:
.csproj
(这可能已过时)
或
<AndroidResgenClass>Resource</AndroidResgenClass>
(当前)
这是<AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
流程的一部分,其中Android Build
工具将为项目中定义的每个资源生成相应的常量资源ID(aapt
- Android,res/
- Xamarin.Android)。然后将它们处理成二进制形式并嵌入Resources/
。因此,.apk
是在成功Resource.designer.cs
之后生成的。
然后更进一步定义特定aapt
Resource
http://code.google.com/android/reference/android/R.html
由于在Android Build工具中调用
Resource Type:
,强烈建议不要手动调用它,除非您了解完整的Android构建过程。
https://developer.android.com/studio/command-line/index.html
就“算法”而言,除了简单地将aapt
映射到如上定义的资源之外,我认为它不是那么复杂。在项目中Resource ID
意义上存在一些复杂性。 例如图书馆项目 - &gt;您的应用项目:
构建工具将库模块中的资源与依赖应用程序模块的资源合并。如果在两个模块中都定义了给定的资源ID,则使用应用程序中的资源。|
如果多个AAR库之间发生冲突,则使用依赖项列表中首先列出的库中的资源(位于依赖项块的顶部)。
为避免公共资源ID的资源冲突,请考虑使用模块特有的前缀或其他一致命名方案(或在所有项目模块中是唯一的)。
https://developer.android.com/studio/projects/android-library.html#Considerations
鉴于大多数人对Merging Resources
的问题,他们通常来自了解实际的第三方Resource.designer.cs
来自何处以及如何获得支持的观点。以下是我个人使用的一些提示:
Resources
MSBuild属性。我的一位同事有一篇令人惊叹的博客文章经历了时间的考验:http://redth.codes/such-android-api-levels-much-confuse-wow/
<TargetFrameworkVersion>
的来源。它来自官方的NuGet包吗?资源是什么时候引入Android框架的? (主要用于材料设计项目)。 例如,如果我收到有关Resource
的错误消息,我可能会检查它所引入的API:
在API级别21中添加
https://developer.android.com/reference/android/R.attr.html#colorPrimary
因此,我们现在知道我们至少需要API 21+才能使用此项目。
colorPrimary
。此外,您可以查看相应Resources
的{{1}}并查看其cache
文件夹。这对于.aar
/ res/
之类的大型绑定非常有用。对于较小的项目,请在反编译的Android Support
Google Play Services
字符串
醇>
例如,让我们看看/res
:
首先我们需要在我们的机器上找到缓存:
.dll
(如果你在OSX上遇到困难,我在这里写了一篇关于在这里找到这些路径的指南 - https://developer.xamarin.com/guides/android/troubleshooting/resolving-library-installation-errors/)
因此,我们现在可以查看此库试图提供给我们的所有相应com.android.support:appcompat-v7:24.2.1
。
AppData\Local\Xamarin\Xamarin.Android.Support.v7.AppCompat\24.2.1\embedded\res
文件。 Resources
进程完成后,它将生成一个新进程,否则将在Resource.designer.cs
上失败。由您决定是否通过该步骤(即检查主项目aapt
文件夹以查找新生成的aapt
文件,以便将其重新包含在项目中。/ LI>
醇>