在发布模式下应用崩溃,但在调试模式下不会- Xamarin Forms

5

我正在开发一款跨平台应用程序,希望将其发布给测试人员,但在发布模式下部署时无法正常工作。至于异常,我没有收到任何异常信息。如问题所述,它在调试模式下运行良好。该应用程序只显示启动画面,然后崩溃。我通过测试神仙对原始应用程序进行了测试,并得到了以下异常信息:

    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
    ... 2 more
Caused by: md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable: System.IO.FileNotFoundException: Could not load file or assembly '<Censored: Name of forms class library>.dll' or one of its dependencies. The system cannot find the file specified.
File name: '<Censored: Name of forms class library>.dll'
  at System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity) [0x00000] in :0 
  at System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] in :0 
  at (wrapper remoting-invoke-with-check) System.AppDomain:Load (System.Reflection.AssemblyName)
  at System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] in :0 
  at Xamarin.Forms.Xaml.XamlParser.GetElementType (Xamarin.Forms.Xaml.XmlType xmlType, IXmlLineInfo xmlInfo, System.Reflection.Assembly currentAssembly, Xamarin.Forms.Xaml.XamlParseException& exception) [0x00000] in :0 
  at (wrapper delegate-invoke) :invoke_Type_XmlType_IXmlLineInfo_Assembly_XamlParseException& (Xamarin.Forms.Xaml.XmlType,System.Xml.IXmlLineInfo,System.Reflection.Assembly,Xamarin.Forms.Xaml.XamlParseException&)
  at Xamarin.Forms.Xaml.XamlTypeResolver.Resolve (System.String qualifiedTypeName, IServiceProvider serviceProvider, Xamarin.Forms.Xaml.XamlParseException& exception) [0x00000] in :0 
  at Xamarin.Forms.Xaml.XamlTypeResolver.TryResolve (System.String qualifiedTypeName, System.Type& type) [0x00000] in :0 
  at Xamarin.Forms.Xaml.ExpandMarkupsVisitor+MarkupExpansionParser.Parse (System.String match, System.String& remaining, IServiceProvider serviceProvider) [0x00000] in :0 
  at Xamarin.Forms.Xaml.ExpandMarkupsVisitor.ParseExpression (System.String& expression, IXmlNamespaceResolver nsResolver, IXmlLineInfo xmlLineInfo, INode node, INode parentNode) [0x00000] in :0 
  at Xamarin.Forms.Xaml.ExpandMarkupsVisitor.Visit (Xamarin.Forms.Xaml.MarkupNode markupnode, INode parentNode) [0x00000] in :0 
  at Xamarin.Forms.Xaml.MarkupNode.Accept (IXamlNodeVisitor visitor, INode parentNode) [0x00000] in :0 
  at Xamarin.Forms.Xaml.ElementNode.Accept (IXamlNodeVisitor visitor, INode parentNode) [0x00000] in :0 
  at Xamarin.Forms.Xaml.ElementNode.Accept (IXamlNodeVisitor visitor, INode parentNode) [0x00000] in :0 
  at Xamarin.Forms.Xaml.RootNode.Accept (IXamlNodeVisitor visitor, INode parentNode) [0x00000] in :0 
  at Xamarin.Forms.Xaml.XamlLoader.Load (Xamarin.Forms.BindableObject view, System.String xaml) [0x00000] in :0 
  at Xamarin.Forms.Xaml.XamlLoader.Load (Xamarin.Forms.BindableObject view, System.Type callingType) [0x00000] in :0 
  at Xamarin.Forms.Xaml.Extensions.LoadFromXaml[LoginPage] (<Censored>.Login.LoginPage view, System.Type callingType) [0x00000] in :0 
  at <Censored>.Login.LoginPage.InitializeComponent () [0x00000] in :0 
  at <Censored>.Login.LoginPage..ctor () [0x00000] in :0 
  at <Censored>.App.b__0 () [0x00000] in :0 
  at <Censored>.ViewFactory.Resolve[LoginViewModel] (<Censored>.Login.LoginViewModel viewModel) [0x00000] in :0 
  at <Censored>.App..ctor () [0x00000] in :0 
    at md5b406f03a919343acc4f3b337a44e1248.MainActivity.n_onCreate(Native Method)
    at md5b406f03a919343acc4f3b337a44e1248.MainActivity.onCreate(MainActivity.java:28)
    at android.app.Activity.performCreate(Activity.java:5458)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
    at android.app.ActivityThread.access$900(ActivityThread.java:174)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5593)
    ... 5 more

我无法向您展示源代码,但我已在新的测试解决方案中复制了该错误。 这里是一个包含测试项目的存储库链接。它只是使用Xamarin Forms的MVVM项目。


我已经尝试过开启和关闭Proguard编译,但都没有起作用。 - B0nde
刚刚尝试关闭链接器,但仍然没有任何变化。 - B0nde
@B0nde.. 前往项目属性>Android 选项>链接器>仅选择 SDK 汇编。 - Jagadeesh Govindaraj
@JagadeeshGovindaraj 在将链接器更改为仅SDK后,结果仍然相同。 - B0nde
2个回答

5

手动删除整个解决方案中的所有obj文件夹和bin文件夹,即可修复。

编辑:现在回来发现这种方法不再起作用!


3
如果你的解决方案在Debug模式下运行正常,但在Release模式下出现问题,可能是链接器的问题。
右键点击你的特定项目(而不是解决方案)-> Android选项 -> 链接器 -> 在链接中选择“None”。这将包含所有dlls在发布库中。

2
我尝试了这个修复方法,它有效...但是它的缺点是安卓应用的.apk包大小增加了很多...超过了3倍(从35Mb增加到了超过135Mb)。 - Calin Vlasin
你是怎么解决这个问题的?我也遇到了同样的问题。 - Reyneer Leon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接