servicehost构造函数不会在linux中初始化其成员(mono - vb.net)

时间:2015-06-23 15:11:19

标签: vb.net ubuntu mono

我写了一个简单的程序,因为我的应用程序不能用单声道工作。但即便是这个简单的程序也无法工作,我理解的是ServiceHost构造函数,它不会初始化其成员(尽管在单声道源代码中你可以看到正确的指令)。

我使用mono / .net 4.0(' mono --version'说4.0.1,monodevelop 5.10,ubuntu 14.04.2 lts(32bit)。我试图添加所需的dll (版本4.0)在exe路径中,但没有任何改变。

这是我使用的简单代码(在.Net中没有错误,在Linux中#34;在System.ServiceModel.ServiceHostBase中无效的IL代码:get_Credentials():IL_0000 ret")。

Imports System.Security.Cryptography.X509Certificates
Imports System.servicemodel

Public Interface IMyService
    Sub DoSomething()
End Interface

Public Class CMyService
    Implements IMyService

    Public Sub DoSomething() Implements IMyService.DoSomething
        Console.WriteLine("-dosomething-")
    End Sub
End Class

Module Module1

    Sub Main()
        Dim h As New ServiceHost(GetType(CMyService), New System.Uri("net.tcp://127.0.0.1/10000"))
    'if you check 'h', you'll see all its member set to Nothing :(
        h.Credentials.ClientCertificate.Authentication.CertificateValidationMode = Security.X509CertificateValidationMode.None
    End Sub

End Module

它已成功编译但如果执行则抛出异常。 正如在源代码中所报告的那样,如果您检查变量的成员' h'我把所有项目都设置为“没什么”。

我尝试使用Xamarin Studio和Visual Studio在Windows 7上编译的32位和64位exe(它们在Windows上运行良好,但在单声道中运行相同)。我在ubuntu中使用从Windows .net 4.0复制的dll。显然,64位版本甚至无法启动。我甚至使用monodevelop 5.10在linux内编译,但我得到了相同的运行时错误。

我改变了#34; System.Security.Criptography.X509Certificates" in" Mono.Security.Criptography.X509Certificates"也改变了dll,但在linux中我总是有同样的错误。

我可以做什么/检查?

我被困了2天:/

提前谢谢。

更新1

我在c#中转换了源代码,用mcs编译,这表明也使用了System.IdentityModel.dll。 c#中的应用程序以这种方式工作。然后我在monodevelop中更新项目,它编译,我可以在IDE中一步一步地完成。

然后我更新了vb.net项目,添加了"缺少" DLL。它在monodevelop下再次正确编译,并且由于同样的原因,逐步调试再次停止。

然后我用vbnc编译,它的工作原理。但我无法在IDE内部进行调试。 我无法理解为什么......我希望我不能将我的所有源代码转换为C#以查看其他"缺少dll",并猜测monodevelop的奇怪行为......

也许我尝试添加“失踪”'在Windows 7中编译,看看linux说的是什么。

更新2

Linux不喜欢在Windows 7中编译的程序,它必须使用vbnc命令行在linux中编译。

1 个答案:

答案 0 :(得分:0)

解决问题的方法是在linux下使用命令行调用的vbnc编译测试程序(由于某些未知原因,monodevelop只能正确编译c#版本而不是vb.net中的等效版本)。

因此使用monodevelop和vb.net进行逐步调试是不可能的,但它可以使用c#。

在c#(使用msc)编译期间,会出现有关缺少dll(System.Identity.dll)的警告。 Microsoft exe不需要它,单声道,但只有msc告诉你它。我找不到它的信息,所以也许它对其他人有用...我被困3天:/