" XamlCTask"任务在Xamarin中意外失败

时间:2016-10-11 11:06:41

标签: xaml xamarin xamarin.forms

我目前在构建我的Xamarin.Forms解决方案时遇到了问题。我收到The "XamlCTask" task failed unexpectedly的错误。我试着查看Xamarin日志和Stacktrace,但我似乎无法找到问题所在。我可以开始寻找任何建议吗?

日志

<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>

堆栈跟踪

  

严重级代码描述项目文件行抑制状态   错误&#34; XamlCTask&#34;任务意外失败。   System.ArgumentException:具有相同键的项已经存在   加入。

     

服务器堆栈跟踪:at   System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)   在System.Collections.Generic.Dictionary`2.Insert(TKey键,TValue   value,Boolean add)at   Xamarin.Forms.Xaml.XamlParser.ParseXamlElementFor(IElementNode节点,   XmlReader阅读器)   Xamarin.Forms.Xaml.XamlParser.ReadNode(XmlReader reader,Boolean   嵌套)   Xamarin.Forms.Xaml.XamlParser.ParseXamlElementFor(IElementNode节点,   XmlReader阅读器)   Xamarin.Forms.Xaml.XamlParser.ReadNode(XmlReader reader,Boolean   嵌套)   Xamarin.Forms.Xaml.XamlParser.ParseXamlElementFor(IElementNode节点,   XmlReader阅读器)   Xamarin.Forms.Build.Tasks.XamlCTask.ParseXaml(Stream stream,   TypeReference typeReference)at   Xamarin.Forms.Build.Tasks.XamlCTask.Compile()at   Xamarin.Forms.Build.Tasks.XamlCTask.Execute()at   System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr的   md,Object [] args,Object server,Object []&amp; outArgs)at   System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(即时聊天   MSG)

     

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

11 个答案:

答案 0 :(得分:5)

TL; DR:

在失败的网页上停用XamlC

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

或在大会层面

[assembly:XamlCompilationAttribute (XamlCompilationOptions.Skip)]

长篇故事

的下一个(迄今为止)版本中修复了抛出相同异常和相同StackTrace的问题,该版本应为2.3.3-pre3或2.3.4。

唯一明确的方法是在http://bugzilla.xamarin.com上粘贴失败的Xaml页面,甚至更好。

我真的很鼓励你这样做。如果问题尚未解决。要么它是你的Xaml中的一个问题,这需要抛出更好的异常,或者它是XamlC中不支持的情况,这需要修复。

答案 1 :(得分: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.

希望这会对你有所帮助。

答案 2 :(得分:1)

希望可能对其他人有用,我在问题中显示了相同的错误(...&#34; XamlCTask&#34;任务意外失败.System.ArgumentException:已经添加了具有相同键的项目...),我的问题是由ListViewTemplate引起的,它包含一个DataTemplate,我在其中推出了两个元素,一个Label和一个Picker。

将标签e Picker分组到DataTemplate内部的唯一元素Frame中,解决了我的问题。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我遇到了同样的问题。清理或重启没有帮助。现在我尝试了模拟器而不是设备。这很有效。之后我能够在设备上构建和运行。

修改

现在我第二次遇到这个问题了。但这里有所不同。该应用程序不再编译。现在它似乎工作。这就是我所做的:

  • 升级至XF 2.3.3.168
  • 升级到XF 2.3.3.168以获取引用的项目
  • 修正了编译错误(仅在更新后出现)

答案 5 :(得分:0)

如果您的Xamarin表单中的数据损坏,有时会发生这种情况。卸载并重新安装。

答案 6 :(得分:0)

也许您有2个Visual Studio实例访问同一设备。

答案 7 :(得分:0)

在这种情况下删除bin和obj文件夹它似乎就像一个魅力!

答案 8 :(得分:0)

我也有这个错误。在我的情况下,它原来是一个xaml问题。我没有对任何dll或引用做任何最近的更改。我刚刚做了一些xaml更改,我突然开始收到此错误。我写的这个xaml导致了这个问题:

            <StackLayout Grid.Row="4" Orientation="Horizontal" HorizontalOptions="Center" >
            <StackLayout.Children>
                <Label Text="Holes" BackgroundColor="White" VerticalOptions="Center"/>
                <Entry x:Name="entryHoles" BackgroundColor="White" WidthRequest="100"/>
            </StackLayout.Children>
            <StackLayout.Children>
                <Label Text="Par" BackgroundColor="White" VerticalOptions="Center"/>
                <Entry x:Name="entryPar" BackgroundColor="White" WidthRequest="100"/>
            </StackLayout.Children>
        </StackLayout>

应该只有一个StackLayout.Children标记。这就是我为了让这个错误消失而改变的方式:

            <StackLayout Grid.Row="4" Orientation="Horizontal" HorizontalOptions="Center" >
            <StackLayout.Children>
                <Label Text="Holes" BackgroundColor="White" VerticalOptions="Center"/>
                <Entry x:Name="entryHoles" BackgroundColor="White" WidthRequest="100"/>
                <Label Text="Par" BackgroundColor="White" VerticalOptions="Center"/>
                <Entry x:Name="entryPar" BackgroundColor="White" WidthRequest="100"/>
            </StackLayout.Children>
        </StackLayout>

我敢打赌额外的StackLayout.Children标签会导致此消息:“已添加具有相同密钥的项目。”如果是这样的话,如果微软可以准确地告诉我们重复的项目是什么的话会很棒。我浪费了各种时间来更新NuGet包。

答案 9 :(得分:0)

此错误表示NuGet包的版本与Xamarin.Forms的版本不匹配。 只需更新项目中的NuGet包或从包列表中删除Xamarin.Forms,然后重新添加。

答案 10 :(得分:0)

我的应用程序中有35页有一个程序集引用来打开/关闭xaml编译。要找到有问题的页面,我必须删除程序集引用并在每个页面上放置以下内容并一次重建一个共享项目,直到找到有问题的页面(确保选择了发布版本)。

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

一旦找到该页面,它很可能是像上面这么多解决方案一样的xaml问题。对我来说,这是因为我不小心在页面上放置了2个资源词典,所以很容易发现,你的可能不那么容易。