【问题标题】:The "XamlCTask" task failed unexpectedly in XamarinXamarin 中的“XamlCTask”任务意外失败
【发布时间】:2016-10-11 11:06:41
【问题描述】:

我目前在构建 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>

堆栈跟踪

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

服务器堆栈跟踪:在 System.ThrowHelper.ThrowArgumentException(异常资源资源) 在 System.Collections.Generic.Dictionary`2.Insert(TKey 键,TValue 值,布尔加)在 Xamarin.Forms.Xaml.XamlParser.ParseXamlElementFor(IElementNode 节点, XmlReader 阅读器)在 Xamarin.Forms.Xaml.XamlParser.ReadNode(XmlReader 阅读器,布尔值 嵌套)在 Xamarin.Forms.Xaml.XamlParser.ParseXamlElementFor(IElementNode 节点, XmlReader 阅读器)在 Xamarin.Forms.Xaml.XamlParser.ReadNode(XmlReader 阅读器,布尔值 嵌套)在 Xamarin.Forms.Xaml.XamlParser.ParseXamlElementFor(IElementNode 节点, XmlReader 阅读器)在 Xamarin.Forms.Build.Tasks.XamlCTask.ParseXaml(流流, 类型参考类型参考)在 Xamarin.Forms.Build.Tasks.XamlCTask.Compile() 在 Xamarin.Forms.Build.Tasks.XamlCTask.Execute() 在 System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, 对象服务器, Object[]& outArgs) 在 System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage 味精)

在 [0] 处重新抛出异常:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(消息数据& 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

【问题讨论】:

  • 这似乎与具有相同名称的对象有关。仔细检查您最近的更改并检查它们是否具有相同的x:Name 属性
  • 不幸的是,当我重命名整个应用程序中的所有命名空间时,我进行了很多更改,但我不记得在我接触的任何组件中添加了x:Name
  • 这太糟糕了。也许还有太多的复制/粘贴?检查双打的名称属性,可能是这样
  • 好的会看看。
  • 我实际上尝试了一个可行的解决方案并添加了一个具有相同 x:Name 的元素,并且该解决方案实际构建了。

标签: xaml xamarin xamarin.forms


【解决方案1】:

tl;博士:

在失败的页面上禁用XamlC

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

或在大会级别

[assembly:XamlCompilationAttribute (XamlCompilationOptions.Skip)]

长篇大论

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

唯一确定的方法是将失败的 Xaml 页面粘贴到此处,或者甚至更好地粘贴到 http://bugzilla.xamarin.com

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

【讨论】:

  • 我不确定失败的页面是什么,这就是我要找的。我应该在哪里或在什么文件中放置程序集级属性?顺便说一句,我正在使用 Xamarin.Forms 2.3.2.127
  • 如果您尚未启用 XamlC,则应将其禁用。如果还是失败了,请报告,我有样品后会尽快查看。
  • 对于今天在将 FreshMvvmPageModel 与 ContentPage 绑定时阅读本文的任何人都对我有所帮助
  • 可疑页面上的 [XamlCompilationAttribute (XamlCompilationOptions.Skip)] 有助于在几分钟内进行调试!
【解决方案2】:

首先,当 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.

希望对你有帮助。

【讨论】:

    【解决方案3】:

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

    在 DataTemplate 中将标签 e 选择器分组到一个独特的元素(框架)中,解决了我的问题。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题。清理或重新启动没有帮助。现在我尝试了模拟器而不是设备。这行得通。之后我就可以在设备上构建和运行了。

        编辑:

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

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

        【讨论】:

          【解决方案6】:

          如果您的 Xamarin Forms nuget 损坏,有时会发生这种情况。卸载并重新安装它们。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

                我也有这个错误。在我的情况下,它原来是一个 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 标记会导致此消息:“已添加具有相同键的项目。”如果是这样,如果 Microsoft 能够准确地告诉我们重复项是什么,那就太好了。我浪费了各种时间来更新 NuGet 包。

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                    【解决方案11】:

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

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

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

                    【讨论】:

                      猜你喜欢
                      • 2017-07-23
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-12-01
                      相关资源
                      最近更新 更多