System.TypeLoadException:父类vtable初始化失败,原因是:AndroidX.SwipeRefreshLayout.Widget.SwipeRefreshLayout类型的VTable设置
关于我的环境的信息
- Mac OS 大苏尔:11.4
- VS for Mac:8.10.6(内部版本 10)
- Xamarin.Android:11.3.0.4
- SDK 工具版本:26.1.1
- SDK平台工具版本:31.0.2
- SDK 构建工具版本:31.0.0 rc5
- microsoft_dist_openjdk_1.8.0.25 1.8.0-25
- Xamarin.Forms:5.0.0.2012
- Xamarin.Forms.Visual.Material:5.0.0.2012
- Xamarin.Google.Android.Material: 1.2.1.1
附加信息
- 使用 AndroidX 库
- 没有参考
Xamarin.Android.Support.Design - 多次手动清洁溶液
- 多次删除所有 bin 和 obj 文件夹并多次重置 Visual Studio
- 目标框架:10.0 (Q)
问题:
我能够构建并部署到我的设备,但是当应用程序运行并加载登录页面时,在InitializeComponent()调用过程中会引发以下异常:
错误:System.TypeLoadException:父类 vtable 初始化失败,原因是:AndroidX.SwipeRefreshLayout.Widget.SwipeRefreshLayout 类型的 VTable 设置失败程序集:/data/data/com.app.dev/files/。覆盖/Xamarin.AndroidX.SwipeRefreshLayout.dll type:SwipeRefreshLayout member:(null) at (wrapper managed-to-native) System.RuntimeTypeHandle.type_is_assignable_from(System.Type,System.Type) at System.RuntimeTypeHandle.CanCastTo (System.RuntimeType type) , System.RuntimeType 目标) [0x00000] 在 /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/corlib/System/RuntimeTypeHandle.cs:265 在 System.RuntimeType.IsAssignableFrom (System.Type c) [0x00020] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/rttype.cs:3809 at Xamarin.Forms .VisualTypeConverter.Register(System.Reflection.Assembly 程序集,System.Collections.Generic.Dictionary`2[TKey,TValue] 映射)[0x00019] 在 D:a1sXamarin.Forms.CoreVisualsVisualTypeConverter .cs:64 在 Xamarin.Forms。VisualTypeConverter.InitMappings () [0x0001a] 在 D:a1sXamarin.Forms.CoreVisualsVisualTypeConverter.cs:22 在 Xamarin.Forms.VisualTypeConverter.ConvertFromInvariantString (System.String 值)[0x00007] 在 D :a1sXamarin.Forms.CoreVisualsVisualTypeConverter.cs:119
以下是正在加载的页面中的 xaml:
<ContentPage x:Class="SignInPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:effects="clr-namespace:XF.Core.Effects;assembly=XF.Core"
x:Name="SignInPage"
IsBusy="{Binding IsBusy, Mode=OneWay}"
Visual="Material"
mc:Ignorable="d">
<ContentPage.Content>
<StackLayout
x:Name="ContentStackLayout"
Margin="0"
Padding="0"
AutomationId="ContentStackLayout"
BackgroundColor="White"
HorizontalOptions="FillAndExpand"
Orientation="Vertical"
VerticalOptions="FillAndExpand">
<Grid
x:Name="MainContentGrid"
Margin="0,0,0,0"
AutomationId="MainContentGrid"
ColumnSpacing="0"
HorizontalOptions="FillAndExpand"
RowSpacing="0"
VerticalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition>
<RowDefinition.Height>
<OnIdiom
x:TypeArguments="GridLength"
Phone="50"
Tablet="60" />
</RowDefinition.Height>
</RowDefinition>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="3*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="8" />
</Grid.ColumnDefinitions>
<Image
x:Name="HeaderGradientImage"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="6"
Aspect="Fill"
AutomationId="HeaderGradientImage"
HorizontalOptions="Fill"
Source="{Binding HeaderGradientBackgroundImageUrl}"
VerticalOptions="Fill" />
<Label
x:Name="TitleLabel"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="6"
AutomationId="TitleLabel"
Style="{Binding HeaderTitleWhiteLabelStyle}"
Text="{Binding Title}" />
<Image
x:Name="LogoImage"
Grid.Row="0"
Grid.Column="4"
Aspect="AspectFit"
AutomationId="LogoImage"
HorizontalOptions="End"
Source="{Binding LogoIconUrl}"
VerticalOptions="Center">
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding AppLogoTappedCommand}" NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
<StackLayout
x:Name="SignInStackLayout"
Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="6"
AutomationId="SignInStackLayout"
HorizontalOptions="FillAndExpand"
Orientation="Vertical">
<StackLayout.VerticalOptions>
<OnIdiom
x:TypeArguments="LayoutOptions"
Phone="CenterAndExpand"
Tablet="StartAndExpand" />
</StackLayout.VerticalOptions>
<StackLayout.Margin>
<OnIdiom
x:TypeArguments="Thickness"
Phone="15,0,15,0"
Tablet="50,75,50,0" />
</StackLayout.Margin>
<Label
x:Name="PleaseLogInLabel"
Margin="0,7,0,0"
AutomationId="PleaseLogInLabel"
FontSize="Large"
HorizontalOptions="Start"
Text="Please Log In"
TextColor="#002D72"
VerticalOptions="Center" />
<Label
x:Name="UserIdLabel"
Margin="0,15,0,0"
AutomationId="UserIdLabel"
FontSize="Small"
Text="USER ID"
TextColor="#002D72"
VerticalOptions="Center">
<Label.WidthRequest>
<OnIdiom
x:TypeArguments="x:Double"
Phone="200"
Tablet="320" />
</Label.WidthRequest>
</Label>
<Frame
x:Name="UserIdFrame"
Margin="0,0,0,0"
AutomationId="UserIdFrame"
BackgroundColor="White"
BorderColor="#002D72"
Padding="0,0,0,0">
<Entry
x:Name="UserIdEntry"
Margin="0,0,0,0"
AutomationId="UserIdEntry"
BackgroundColor="White"
FontSize="Medium"
Keyboard="Text"
Placeholder="User"
PlaceholderColor="#BBBBBB"
Text="{Binding UserId, Mode=TwoWay}"
TextChanged="UserIdEntry_TextChanged"
TextColor="#002D72"
VerticalOptions="Center"
Visual="Material">
<Entry.WidthRequest>
<OnIdiom
x:TypeArguments="x:Double"
Phone="200"
Tablet="320" />
</Entry.WidthRequest>
<Entry.Effects>
<effects:CgEntryCapitalizeKeyboardEffect />
</Entry.Effects>
</Entry>
</Frame>
<Label
x:Name="PasswordLabel"
Margin="0,5,0,0"
AutomationId="PasswordLabel"
FontSize="Small"
Text="Password"
TextColor="#002D72"
VerticalOptions="Center">
<Label.WidthRequest>
<OnIdiom
x:TypeArguments="x:Double"
Phone="200"
Tablet="320" />
</Label.WidthRequest>
</Label>
<Frame
x:Name="PasswordFrame"
Margin="0,0,0,0"
AutomationId="PasswordFrame"
BackgroundColor="White"
BorderColor="#002D72"
Padding="0,0,0,0">
<Entry
x:Name="PasswordEntry"
Margin="0,0,0,0"
AutomationId="PasswordEntry"
BackgroundColor="White"
FontSize="Medium"
IsPassword="true"
Keyboard="Text"
Placeholder="Desktop Password"
PlaceholderColor="#BBBBBB"
Text="{Binding Password, Mode=TwoWay}"
TextChanged="PasswordEntry_TextChanged"
TextColor="#002D72"
VerticalOptions="Center">
<Entry.WidthRequest>
<OnIdiom
x:TypeArguments="x:Double"
Phone="200"
Tablet="320" />
</Entry.WidthRequest>
</Entry>
</Frame>
<Label
x:Name="DomainLabel"
Margin="0,5,0,0"
AutomationId="DomainLabel"
FontSize="Small"
Text="Domain"
TextColor="#002D72"
VerticalOptions="Center">
<Label.WidthRequest>
<OnIdiom
x:TypeArguments="x:Double"
Phone="200"
Tablet="320" />
</Label.WidthRequest>
</Label>
<Frame
x:Name="NetworkDomainPickerFrame"
Margin="0,0,0,0"
AutomationId="NetworkDomainPickerFrame"
BackgroundColor="White"
BorderColor="#002D72"
Padding="0,0,0,0">
<Picker
x:Name="NetworkDomainPicker"
Margin="0,0,0,0"
AutomationId="NetworkDomainPicker"
BackgroundColor="White"
Title="Select Network Domain"
FontSize="Medium"
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding NetworkDomainList}"
TitleColor="#BBBBBB"
SelectedIndexChanged="NetworkDomainPicker_SelectedIndexChanged"
SelectedItem="{Binding SelectedNetworkDomain, Mode=TwoWay}"
TextColor="#002D72"
VerticalOptions="Center">
<Picker.WidthRequest>
<OnIdiom
x:TypeArguments="x:Double"
Phone="200"
Tablet="320" />
</Picker.WidthRequest>
</Picker>
</Frame>
<Button
x:Name="SignInButton"
Margin="0,15,0,0"
AutomationId="SignInButton"
BackgroundColor="#056DAE"
Command="{Binding SignInCommand}"
FontSize="Medium"
IsEnabled="{Binding IsFormEntryValid}"
Text="Log In"
TextColor="White">
<Button.HeightRequest>
<OnIdiom
x:TypeArguments="x:Double"
Phone="40"
Tablet="50" />
</Button.HeightRequest>
</Button>
<BoxView
x:Name="ViewHeaderSeparatorBoxView"
Margin="0,15,0,15"
AutomationId="ViewHeaderSeparatorBoxView"
BackgroundColor="#CCCCCC"
HeightRequest="2"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand" />
<ScrollView x:Name="DisclaimerScrollView" AutomationId="DisclaimerScrollView">
<StackLayout Orientation="Vertical">
<Label
x:Name="DisclaimerLabel"
Margin="0,0,0,0"
AutomationId="DisclaimerLabel"
FontSize="Small"
HorizontalOptions="StartAndExpand"
Text="{Binding SignInDisclaimerText}"
TextColor="#53565A"
VerticalOptions="StartAndExpand" />
<Label
x:Name="DisclaimerLabel"
Margin="0,20,0,0"
AutomationId="DisclaimerLabel"
FontSize="Micro"
HorizontalOptions="CenterAndExpand"
LineBreakMode="WordWrap"
Text="{Binding SignInDisclaimerText}"
TextColor="#53565A"
VerticalOptions="EndAndExpand" />
</StackLayout>
</ScrollView>
</StackLayout>
</Grid>
</StackLayout>
</ContentPage.Content>
</ContentPage>
回答
https://github.com/xamarin/Xamarin.Forms/issues/14424
安装 Xamarin.AndroidX.AppCompat.AppCompatResources(版本 1.3.0)
和降级
Xamarin.AndroidX.Core 从版本 1.6.0 到 1.5.0
为我解决问题。