我创建了一个 Android 和 iOS 平台的 Xamarin 表单应用程序,现在计划部署到 google play store 和 App Store。
我现在需要启用 Linker SDK 和用户程序集以剥离所有未使用的类并使应用程序文件更小。
在 Android 选项上,我有这个设置
我还创建了一个 Linker.xml 并在属性设置中将其设置为 LinkDescription
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<assembly fullname="Prism.Forms">
<type fullname="Prism.Common.ApplicationProvider" preserve="all" />
<type fullname="Prism.Services.PageDialogService" preserve="all" />
<type fullname="Prism.Services.DeviceService" preserve="all" />
<type fullname="Prism.Ioc*" preserve="all" />
<type fullname="Prism.Modularity*" preserve="all" />
<type fullname="Prism.Navigation*" preserve="all" />
<type fullname="Prism.Behaviors.PageBehaviorFactory" preserve="all">
<method name=".ctor" />
</type>
<type fullname="Prism.Services.DependencyService" preserve="all">
<method name=".ctor" />
</type>
</assembly>
<assembly fullname="Prism">
<type fullname="Prism.Navigation*" preserve="all" />
<type fullname="Prism.Logging.EmptyLogger" preserve="all">
<method name=".ctor" />
</type>
</assembly>
<assembly fullname="Unity.Abstractions">
<type fullname="*" />
</assembly>
<assembly fullname="Unity.Container">
<type fullname="*" />
</assembly>
<assembly fullname="Newtonsoft.Json">
<type fullname="Newtonsoft.Json.*" preserve="all" />
</assembly>
</linker>
以下是我拥有的 Stacktrace
10-04 06:06:06.537 E/mono ( 2305): referenceTable GDEF length=670 1
referenceTable GSUB length=7202 1
referenceTable GPOS length=24560 1
10-04 06:06:06.537 E/mono ( 2305): Unhandled Exception:
10-04 06:06:06.537 E/mono ( 2305): Unity.ResolutionFailedException: For more information add Diagnostic extension: Container.AddExtension(new Diagnostic()) ---> System.InvalidOperationException: No public constructor is available for type MyXamarinApp.Mobile.Client.ViewModel.Booking.LandingPageViewModel. ---> Unity.Exceptions.InvalidRegistrationException: Exception of type 'Unity.Exceptions.InvalidRegistrationException' was thrown.
10-04 06:06:06.537 E/mono ( 2305): --- End of inner exception stack trace ---
10-04 06:06:06.537 E/mono ( 2305): at Unity.Processors.ConstructorProcessor+<>c.<GetResolver>b__18_1 (Unity.Builder.BuilderContext& c) [0x00022] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.537 E/mono ( 2305): at Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[TMemberInfo,TData].<GetResolver>b__0 (Unity.Builder.BuilderContext& c) [0x00000] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.537 E/mono ( 2305): at Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[TMemberInfo,TData].<GetResolver>b__0 (Unity.Builder.BuilderContext& c) [0x00000] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.537 E/mono ( 2305): at Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[TMemberInfo,TData].<GetResolver>b__0 (Unity.Builder.BuilderContext& c) [0x00000] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.537 E/mono ( 2305): at Unity.UnityContainer+<>c__DisplayClass94_0.<OptimizingFactory>b__0 (Unity.Builder.BuilderContext& c) [0x00042] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.537 E/mono ( 2305): at Unity.Strategies.BuildPlanStrategy.PreBuildUp (Unity.Builder.BuilderContext& context) [0x000e0] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.537 E/mono ( 2305): at Unity.UnityContainer+<>c.<.ctor>b__58_1 (Unity.Builder.BuilderContext& context) [0x00015] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.537 E/mono ( 2305): --- End of inner exception stack trace ---
10-04 06:06:06.537 E/mono ( 2305): at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.3(intptr,intptr,intptr)
10-04 06:06:06.537 E/mono ( 2305): at (wrapper native-to-managed) Android.Runtime.DynamicMethodNameCounter.3(intptr,intptr,intptr)
10-04 06:06:06.538 E/mono-rt ( 2305): [ERROR] FATAL UNHANDLED EXCEPTION: Unity.ResolutionFailedException: For more information add Diagnostic extension: Container.AddExtension(new Diagnostic()) ---> System.InvalidOperationException: No public constructor is available for type MyXamarinApp.Mobile.Client.ViewModel.Booking.LandingPageViewModel. ---> Unity.Exceptions.InvalidRegistrationException: Exception of type 'Unity.Exceptions.InvalidRegistrationException' was thrown.
10-04 06:06:06.538 E/mono-rt ( 2305): --- End of inner exception stack trace ---
10-04 06:06:06.538 E/mono-rt ( 2305): at Unity.Processors.ConstructorProcessor+<>c.<GetResolver>b__18_1 (Unity.Builder.BuilderContext& c) [0x00022] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.538 E/mono-rt ( 2305): at Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[TMemberInfo,TData].<GetResolver>b__0 (Unity.Builder.BuilderContext& c) [0x00000] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.538 E/mono-rt ( 2305): at Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[TMemberInfo,TData].<GetResolver>b__0 (Unity.Builder.BuilderContext& c) [0x00000] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.538 E/mono-rt ( 2305): at Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[TMemberInfo,TData].<GetResolver>b__0 (Unity.Builder.BuilderContext& c) [0x00000] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.538 E/mono-rt ( 2305): at Unity.UnityContainer+<>c__DisplayClass94_0.<OptimizingFactory>b__0 (Unity.Builder.BuilderContext& c) [0x00042] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.538 E/mono-rt ( 2305): at Unity.Strategies.BuildPlanStrategy.PreBuildUp (Unity.Builder.BuilderContext& context) [0x000e0] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.538 E/mono-rt ( 2305): at Unity.UnityContainer+<>c.<.ctor>b__58_1 (Unity.Builder.BuilderContext& context) [0x00015] in <4013266d08a1421d96f21954cb38814a>:0
10-04 06:06:06.538 E/mono-rt ( 2305): --- End of inner exception stack trace ---
10-04 06:06:06.538 E/mono-rt ( 2305): at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.3(intptr,intptr,intptr)
10-04 06:06:06.538 E/mono-rt ( 2305): at (wrapper native-to-managed) Android.Runtime.DynamicMethodNameCounter.3(intptr,intptr,intptr)
我使用了 Prism 7.0 框架和 Unity。