在调试模式下运行的同一Android应用程序在发布模式下崩溃

时间:2016-02-20 10:23:58

标签: c# android xamarin signalr

我使用Xamarin为Visual Studio和C#语言编写了一个简单的应用程序。代码是:

    HubConnection hubConnection;
    IHubProxy chatHubProxy;
    async void btnConnect_Click(object sender, EventArgs e)
    {
        try
        {
            TextView log = FindViewById<TextView>(Resource.Id.txtLog);
            base.OnResume();

            hubConnection = new HubConnection("http://192.168.1.3:2010/signalr");

            chatHubProxy = hubConnection.CreateHubProxy("MyHub");

            chatHubProxy.On<string>("AddMessage", (message) =>
            {
                TextView text = FindViewById<TextView>(Resource.Id.txtLog);
                text.Text = message;
            });

            var localIP = "192.168.1.104"; //the android device has this IP

            await hubConnection.Start();

            var srvrMessage = chatHubProxy.Invoke<string>("LoginFromMobile", "mahdi", "p@SsW0Rd",
                hubConnection.ConnectionId, localIP);
            if (srvrMessage != null)
            {
                log.Text = srvrMessage.Result;
            }
            else
                log.Text = "can't connect to server";
        }
        catch (Exception ex)
        {
            TextView text = FindViewById<TextView>(Resource.Id.txtLog);
            text.Text = ex.StackTrace;
        }
    }

当我点击“连接”按钮时,我连接到网络中我的电脑上的SignalR Hub,并且在DEBUG模式下一切正常。但不幸的是,当我在RELEASE模式下编译相同的应用程序时,我收到以下错误:

enter image description here

我无法理解为什么......请告诉我需要考虑的是让应用程序在发布模式下正常工作。有任何许可问题吗?有些配置或设置缺失? 您的指南真的很有帮助和赞赏。

2 个答案:

答案 0 :(得分:3)

如果某些内容在调试模式下工作但不在发布模式下,那么问题很可能就是链接器在生成发布二进制文件时不包含你的dll。

如果您在解决方案资源管理器中双击Android项目,则可以更改Build - &gt;下的设置。 Android Build。

您需要为配置选择Release,然后选择Linker选项卡。如果您选择&#34;不要链接&#34;您的项目引用的所有dll都将包含在Release二进制文件中。这将导致更大的二进制大小,但将帮助您诊断它是否是问题。

您可以从Xamarin文档中了解有关链接器的更多信息: https://developer.xamarin.com/guides/ios/advanced_topics/linker/

答案 1 :(得分:0)

链接到“仅限Sdk程序集”解决了我的问题。