在Xamarin中,“XamlCTask”任务意外失败

8

我目前在构建我的Xamarin.Forms解决方案时遇到了问题。我收到了一个错误信息:The "XamlCTask" task failed unexpectedly。我尝试查看Xamarin日志和堆栈跟踪,但似乎找不到问题所在。你有任何建议可以让我开始寻找吗?

日志

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>0</EventID>
<Type>3</Type>
<SubType Name="Warning">0</SubType>
<Level>4</Level>
<TimeCreated SystemTime="2016-10-11T10:45:07.4999078Z" />
<Source Name="Xamarin.VisualStudio.Android.Designer.MonoAndroidDesignerService" />
<Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" />
<Execution ProcessName="devenv" ProcessID="19260" ThreadID="1" />
<Channel />
<Computer>XXXXXX</Computer>
</System>
<ApplicationData>An unexpected error occurred trying to initialize Android Designer.</ApplicationData>
</E2ETraceEvent>

堆栈跟踪

错误代码 描述 项目 文件 行 抑制状态 错误 “XamlCTask”任务意外失败。 系统.ArgumentException:已添加具有相同键的项

服务堆栈跟踪:在 System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) 在System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) Xamarin.Forms.Xaml.XamlParser.ParseXamlElementFor(IElementNode node, XmlReader reader) Xamarin.Forms.Xaml.XamlParser.ReadNode(XmlReader reader, Boolean nested) Xamarin.Forms.Xaml.XamlParser.ParseXamlElementFor(IElementNode node, XmlReader reader) Xamarin.Forms.Xaml.XamlParser.ReadNode(XmlReader reader, Boolean nested) Xamarin.Forms.Xaml.XamlParser.ParseXamlElementFor(IElementNode node, XmlReader reader) Xamarin.Forms.Build.Tasks.XamlCTask.ParseXaml(Stream stream, TypeReference typeReference) Xamarin.Forms.Build.Tasks.XamlCTask.Compile() Xamarin.Forms.Build.Tasks.XamlCTask.Execute() 在System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)

[0]处重新抛出异常:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at Microsoft.Build.Framework.ITask.Execute()
在Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext() XXXXXXX.XXXXXX.XXXXXX


1
似乎与对象具有相同的名称有关。仔细检查您最近的更改,并检查它们是否具有相同的“x:Name”属性。 - Gerald Versluis
很不幸,我在整个应用程序中重命名了所有的命名空间,因此我有很多更改需要进行,但我不记得在我接触到的任何组件中添加 x:Name - Bon Macalindong
那很糟糕。也许复制/粘贴太多了?检查名称属性是否有重复,很可能是这个问题。 - Gerald Versluis
我实际上尝试了在一个工作解决方案中添加一个具有相同“x:Name”的元素,而且该解决方案实际上已经构建成功。 - Bon Macalindong
我现在很困惑,不知道发生了什么。它已经修复了吗? - Gerald Versluis
显示剩余3条评论
11个回答

7

简述:

在失败的页面上禁用XamlC

[XamlCompilationAttribute (XamlCompilationOptions.Skip)]
public partial class MyPageThrowing {}

或在汇编语言级别

[assembly:XamlCompilationAttribute (XamlCompilationOptions.Skip)]

长话短说

一个问题引发了相同的异常和相同的堆栈跟踪,在下一个(截至目前为止)版本的中已经得到解决,该版本应为2.3.3-pre3或2.3.4。

确定的方法是在此处粘贴您失败的Xaml页面,或者更好的方法是在http://bugzilla.xamarin.com上进行。

我真的鼓励您这样做。如果问题尚未解决。要么是Xaml中存在问题,需要抛出更好的异常,要么是XamlC中不支持的情况,需要修复。


我不确定是哪个页面出错了,这就是我要找的。在哪个文件中应该放置汇编级别的属性?顺便说一下,我正在使用Xamarin.Forms 2.3.2.127版本。 - Bon Macalindong
如果您尚未启用XamlC,则应禁用它。如果仍然失败,请报告,我会在收到样本后尽快查看。 - Stephane Delcroix
对于今天帮我绑定FreshMvvmPageModel与ContentPage的任何阅读者,非常感谢您! - Kokolo
[XamlCompilationAttribute (XamlCompilationOptions.Skip)] 在可疑页面上的使用帮助调试仅需几分钟! - user3125174

1
希望对其他人有用,我遇到了与问题中显示的相同错误(“XamlCTask”任务意外失败。System.ArgumentException:已添加具有相同键的项...),我的问题是由一个ListViewTemplate引起的,其中包含一个DataTemplate,在其中我放置了两个元素,一个Label和一个Picker。
将Label和Picker分组在一个唯一的元素Frame中,放在DataTemplate内部,解决了我的问题。

1

首先,当xamarin.forms版本与您指向的Nuget不兼容时,将引发此问题。因此,我想告诉您这些步骤并继续进行。

Step1: Update Xamarin.Forms version in PCL and all other projects.

Step2: Check for matching dependencies with nuget package.i.e make sure everywhere the the solution is using the **same** version of the Xamarin.Forms.

希望这对你有所帮助。

0

我已经解决了这个问题。由于我正在重命名命名空间,我将命名空间别名命名错误了。我在别名名称中使用了点(.),例如xmlns:sample.pages="clr-namespace:JustAnotherNamespace"。当我删除了这些点时,解决方案就能够构建了!


0
在这种情况下,删除 bin 和 obj 文件夹似乎非常有效!

0
有时候这可能是由于您的Xamarin Forms nuget损坏所致。请卸载并重新安装它们。

0

也许您有两个实例的Visual Studio正在访问同一设备。


0

我曾经遇到过同样的问题。清理或重启都没有帮助。现在我尝试使用模拟器而不是设备。这个方法有效了。之后我就能够在设备上构建和运行了。

编辑:

现在我第二次遇到了这个问题。但这次情况有所不同。应用程序无法编译。现在它似乎可以工作了。这是我所做的:

  • 升级到XF 2.3.3.168
  • 为引用的项目升级到XF 2.3.3.168
  • 修复编译错误(仅在更新后出现)

0

这个错误表示NuGet包的版本和Xamarin.Forms的版本不匹配。只需更新项目中的NuGet包或从包列表中删除Xamarin.Forms,然后再次添加即可。


0

我的应用程序中有35个页面,其中一个装配引用用于开启/关闭XAML编译。为了找到问题所在的页面,我不得不移除装配引用,并在每个页面上放置以下内容,然后逐个重建共享项目,直到找到问题所在的页面(确保选择了发布构建)。

#if (DEBUG != true)
    [XamlCompilation(XamlCompilationOptions.Compile)]
#endif

一旦您找到页面,很可能是像上面许多解决方案一样的XAML问题。对我来说,原因是我不小心在页面上放了两个资源字典,所以很容易发现,但你的可能不太容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接