Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 释放模式下的IoCResolveException_Xamarin_Xamarin.android_Mvvmcross - Fatal编程技术网

Xamarin 释放模式下的IoCResolveException

Xamarin 释放模式下的IoCResolveException,xamarin,xamarin.android,mvvmcross,Xamarin,Xamarin.android,Mvvmcross,我正在使用MVVMCross的Xamarin应用程序工作 当我在调试模式下运行时,该应用程序可以完美地工作 但如果尝试在发布模式下运行,则会失败,出现以下异常: Exception masked MvxIoCResolveException: Failed to resolve type FlexConta.Contracts.Service.IUserService [mvx] at MvvmCross.Platform.IoC.MvxSimpleIoCContainer.Resol

我正在使用MVVMCross的Xamarin应用程序工作

当我在调试模式下运行时,该应用程序可以完美地工作

但如果尝试在发布模式下运行,则会失败,出现以下异常:

Exception masked MvxIoCResolveException: Failed to resolve type 
FlexConta.Contracts.Service.IUserService
[mvx]     at MvvmCross.Platform.IoC.MvxSimpleIoCContainer.Resolve (System.Type t) [0x00035] in <0da3cbd163cf47a29ec04fff5bb9eecd>:0 
[mvx]   at MvvmCross.Platform.IoC.MvxSimpleIoCContainer.Resolve[T] () [0x00000] in <0da3cbd163cf47a29ec04fff5bb9eecd>:0 
[mvx]   at MvvmCross.Platform.Mvx.Resolve[TService] () [0x00005] in <0da3cbd163cf47a29ec04fff5bb9eecd>:0 
[mvx]   at FlexConta.Core.AppStart.Start (System.Object hint) [0x00000] in <880d0bdc2a5448ffb4d7b35d827753b5>:0 
[mvx]   at MvvmCross.Droid.Support.V7.AppCompat.MvxSplashScreenAppCompatActivity.TriggerFirstNavigate () [0x00005] in <74631770bbbe4bff8d50c85acb55083c>:0 
[mvx]   at MvvmCross.Droid.Support.V7.AppCompat.MvxSplashScreenAppCompatActivity.InitializationComplete () [0x00009] in <74631770bbbe4bff8d50c85acb55083c>:0 
[mvx]   at MvvmCross.Droid.Platform.MvxAndroidSetupSingleton.<InitializeFromSplashScreen>b__7_1 () [0x0000a] in <099dd6f64bd74189922e6888bc76e146>:0 
[mvx]   at MvvmCross.Platform.Core.MvxMainThreadDispatcher.ExceptionMaskedAction (System.Action action) [0x00000] in <0da3cbd163cf47a29ec04fff5bb9eecd>:0 
可能发生什么情况?

您可以在PCL中创建一个PreserveAttribute,并将其添加到链接器正在剥离的类中。将其用法描述为

如果您不想依赖Xamarin库–例如 例如,您正在构建一个跨平台的可移植类库 PCL–您仍然可以使用Android.Runtime.Preserve属性。到 为此,在Android.Runtime中声明一个PreserveAttribute类 名称空间如下:

如果要防止链接共享PCL,可以使用来防止链接器从PCL中剥离代码


在android cs项目中,只需在此处或通过属性UI添加PClassemblyNamer。Android选项->链接器->跳过链接程序集,在输入中输入您的PCL程序集名称。

如果您的链接器设置为在发布版本中设置为“无”,请在您的UserService`类,实际上是您的所有*服务和*存储库类上添加链接器[Preserve AllMembers=true]。。。。
    public override void Initialize()
    {
        base.Initialize();

        CreatableTypes()
            .EndingWith("Repository")
            .AsInterfaces()
            .RegisterAsLazySingleton();

        CreatableTypes()
            .EndingWith("Service")
            .AsInterfaces()
            .RegisterAsLazySingleton();

        Mvx.RegisterSingleton<IUserRestAPI>(new UserRestAPI());

        RegisterAppStart(new AppStart());
    }
public class UserService : IUserService
{
    private readonly IUserRepository _userRepository;
    private readonly IDocumentTypesRepository _documentTypesRepository;
    private readonly IUserRestAPI _userRestAPI;

    public UserService(IUserRepository userRepository, IDocumentTypesRepository documentTypesRepository, IUserRestAPI userRestAPI)
    {
        _userRepository = userRepository;
        _documentTypesRepository = documentTypesRepository;
        _userRestAPI = userRestAPI;
    }
    .
    .
    .
}
namespace Android.Runtime
{
    public sealed class PreserveAttribute : System.Attribute
    {
        public bool AllMembers;
        public bool Conditional;
    }
}