【问题标题】:Regressed Issue: XamlCompilation error Value cannot be null, Parameter name: method回归问题:XamlCompilation 错误值不能为空,参数名称:方​​法
【发布时间】:2017-07-21 15:08:16
【问题描述】:

我搜索了 SO 以找到 this 问题,但答案对我不起作用,因此问题仍然存在。

就个人而言,我认为该问题可能与某些配置“事物”有关,但我不知道从哪里开始寻找解决它。据我所知,我没有改变任何超出规范的配置设置(只是使用了标准的新项目方法)。以下是关于我的问题的一些详细信息:

恰好今天是第一次尝试 XamlC 功能。起初我在我的 App.cs 文件中尝试了程序集级属性:

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]

编译后,我得到了一堆完全相同的错误。在使用 TemplateControl 的任何页面上,我也遇到了不同的错误。所以我把它从程序集级别上拉下来,把一个类级别的属性放在一个页面上,它仍然失败并出现同样的错误:

Value cannot be null.
Parameter name: method

我在 Stackoverflow 上四处寻找,发现大约一年前有人遇到了同样的问题(在这里),但他们说他们通过将 Xam Forms 升级到最新版本解决了这个问题。由于我使用的是最新的稳定版本,所以我无处可去。

我在我的应用程序的几个页面上尝试了这个类级属性,但发现它只能在我整个应用程序的一个页面上工作......恰好这个页面在 XAML 标记中的绑定为零。我想知道是否引入了导致它崩溃的错误。

无效的页面标记:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Prepify.App.Pages.MainMenu"
                         xmlns:controls="clr-namespace:ImageCircle.Forms.Plugin.Abstractions;assembly=ImageCircle.Forms.Plugin.Abstractions"
                         BackgroundColor="White"
             Title="Menu">
    <StackLayout VerticalOptions="FillAndExpand">
        <ListView
            Header="{Binding .}"
            SeparatorColor="{StaticResource dividerColor}"
            HasUnevenRows="True"
            ItemSelected="AppMenu_OnItemSelected"
            ItemTapped="AppMenu_OnItemTapped"
            ItemsSource="{Binding Items}"
            x:Name="appMenu">

            <ListView.HeaderTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="10"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="30"/>
                            <ColumnDefinition Width="10"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="30"/>
                            <RowDefinition Height="80"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="5"/>
                        </Grid.RowDefinitions>

                        <BoxView Grid.ColumnSpan="4" Grid.RowSpan="4" BackgroundColor="{StaticResource grayDark}"/>
                        <controls:CircleImage Grid.Column="1" Grid.Row="1" HorizontalOptions="Start" VerticalOptions="End" Source="{Binding ProfileImageUrl}" WidthRequest="75" HeightRequest="75"/>
                        <Label Grid.Column="1" Grid.Row="2" Text="{Binding FullName}"/>
                        <ActivityIndicator Grid.Column="2" Grid.Row="2" IsVisible="{Binding IsBusy}" IsRunning="{Binding IsBusy}" Color="White" WidthRequest="20" HeightRequest="20" VerticalOptions="Center" />

                    </Grid>
                </DataTemplate>
            </ListView.HeaderTemplate>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal" >
                            <StackLayout.Padding>
                                <OnPlatform x:TypeArguments="Thickness" Android="15,15,15,15" iOS="25,12,15,12" />
                            </StackLayout.Padding>
                            <Image Source="{Binding Icon}" VerticalOptions="Center" WidthRequest="20" HeightRequest="20"/>
                            <Image WidthRequest="20"/>
                            <Label Text="{Binding Label}" VerticalOptions="Center" TextColor="{Binding LabelColor}" Style="{DynamicResource ListItemTextStyle}"/>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>

唯一有效页面的标记(注意,任何地方都没有绑定):

<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="Prepify.App.Pages.Root"
    xmlns:pages="clr-namespace:Prepify.App.Pages;assembly=Prepify.App"
    MasterBehavior="Popover"
    Title="Make Preparedness Easy">

    <MasterDetailPage.Master>
        <pages:MainMenu/>
    </MasterDetailPage.Master>

</MasterDetailPage>

我正在使用发布此问题时的所有最新版本。 视觉工作室 2015 Xamarin.Forms 2.3.3.193 Xamarin.VS 4.3.0.784

【问题讨论】:

    标签: .net xaml xamarin xamarin.forms


    【解决方案1】:

    对于包含一个页面 (xaml + cs) 和一个 ViewModel 的项目,我遇到了完全相同的问题。我更改了一行,节省了机会,但它不再构建,也出现此错误:

    Value cannot be null.
    Parameter name: method
    

    在我的情况下,更改包版本修复了它。只需右键单击您的项目>打开属性>打开左侧的包选项卡>并增加包版本号。当然,我在我的解决方案上做了很多清理和重建。

    这对我有用,但我必须承认我刚刚开始使用 Xamarin,所以我真的不知道我在做什么:D 也许这对任何人都有帮助。

    哦,也许很重要:我在 Visual Studio 2017 中使用 Xamarin 3.2.0.839982

    【讨论】:

    • 我尝试了其他一些不起作用的解决方案,但确实如此,而且它是迄今为止最简单的尝试。只需在项目属性中将包版本从 1.0.0 更改为 1.0.1 即可重新构建,没有错误。
    【解决方案2】:

    所以...在收到您的反馈以及来自here 的一些反馈后,我决定尝试从头开始重建我的 PCL。经过数小时煞费苦心地一次迁移一个文件并确保 XamlCompilation 在整个过程中的每一步都能正常工作,我让它可以正常构建而没有错误。然后,我只是将我制作的新项目(2 个 PCL)复制到告诉的项目之上,并且完美地编译了解决方案。

    回答:???空无一人。这完全是侥幸,一路上我没有学到任何东西可以查明问题的原因。如果遇到此问题,请尝试使用标准项目模板从头开始重建 PCL。

    【讨论】:

    • 你了解到,像我和我之前的许多人一样,我们在使用 xamarin 时犯了一个错误。
    • 刚刚遇到指向我所有 xaml 文件的第 1 行的相同构建错误。幸运的是,这发生在一个快速的 Prism Forms 测试项目中。它发生在从 Prism 模板包中添加 ContentPage 之后。在将导航连接到它并得到以下信息后尝试构建:值不能为空。参数名称:类型。在我项目中的每个 XAML 文件上。
    • 能够通过更新 Xamarin.Forms 来解决...即使我显示的是最新安装的。 ??
    【解决方案3】:

    警告:这不是一个正确的答案,但对于评论来说太长了。那就回答吧。

    我将您粘贴的 XAML 用于新的 Xamarin.Forms 项目(引用 XF 2.3.3.180(也尝试使用 .193)和 ImageCircle 1.8.1)存根 2 个事件处理程序,添加了 @ 987654322@ 属性,它编译得很好。

    如果您无法缩小问题范围,但仍认为这是 Xamarin.Forms 中的问题,您应该在 https://bugzilla.xamarin.com/enter_bug.cgi?product=Forms 打开包含重现案例的错误报告。完成后您甚至可以 ping 我,以便我查看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2013-09-13
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多