回归问题:XamlCompilation错误值不能为null,参数名称:方​​法

时间:2017-03-02 03:11:23

标签: .net xaml xamarin xamarin.forms

我搜索了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>

我在发布此问题时使用了所有最新信息。 Visual Studio 2015 Xamarin.Forms 2.3.3.193 Xamarin.VS 4.3.0.784

3 个答案:

答案 0 :(得分:1)

所以......在收到您的反馈意见后,我从here获得了一些反馈,我决定尝试从头开始重建我的PCL。经过几个小时艰苦地一次一个地迁移文件并确保XamlCompilation在整个过程中的每一步都工作,我让它在没有错误的情况下构建。然后我只是将我制作的新项目(2个PCL)复制到了被告知的项目之上,并且解决方案编译得非常完美。

答案:???空无一人。这是一个完全侥幸,我一路上学到的东西都无法确定问题的原因。如果您遇到此问题,请尝试使用标准项目模板从头开始重建PCL。

答案 1 :(得分:0)

  

警告:这不是一个正确的答案,但评论时间太长。回答它是。

我使用了你粘贴的XAML并在一个新的Xamarin.Forms项目中使用它(引用XF 2.3.3.180(也尝试使用.193)和ImageCircle 1.8.1)将2个事件处理程序存根,添加了{ {1}}属性并且编译得很好。

如果您无法缩小问题的范围并仍然认为它是Xamarin.Forms中的一个问题,那么您应该在https://bugzilla.xamarin.com/enter_bug.cgi?product=Forms打开一个带有复制案例的错误报告。

。你甚至可以在我完成后对我进行ping操作。

答案 2 :(得分:0)

对于包含一个页面(xaml + cs)和一个ViewModel的项目,我遇到了完全相同的问题。我更改了一条线,保存了机会,但由于以下错误,它不再生成了:

Value cannot be null.
Parameter name: method

就我而言,更改软件包版本可以解决此问题。只需右键单击您的项目>打开属性>打开左侧的Package选项卡>并增加Package版本号。当然,我在解决方案上进行了许多“清理和重建”。

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

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