Parameters System.Net.Mail.MailMessage扩展名中的参数计数不匹配

Parameters System.Net.Mail.MailMessage扩展名中的参数计数不匹配,parameters,count,mismatch,Parameters,Count,Mismatch,当_sendMethod.Invoke时发生错误。 你知道如何解决这个问题吗?这里有C代码。它似乎工作得很好。但是,它在vb.net中无法正常工作。我需要为此编写VB.NET 这是关于异常的信息 StackTrace:at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(对象obj、BindingFlags invokeAttr、Binder Binder、对象[]参数、CultureInfo区域性) 在System.Reflec

当_sendMethod.Invoke时发生错误。 你知道如何解决这个问题吗?这里有C代码。它似乎工作得很好。但是,它在vb.net中无法正常工作。我需要为此编写VB.NET

这是关于异常的信息

StackTrace:at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(对象obj、BindingFlags invokeAttr、Binder Binder、对象[]参数、CultureInfo区域性) 在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性) 在PIPEmail.MailMessageExt.Save(MailMessage消息,字符串文件名)

消息:“参数计数不匹配。”

数据:{System.Collections.ListDictionaryInternal}

TragetSite:{System.Object[]InvokeArgumentsCheck(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo)}


结束模块

我在下面的代码中添加了“True”,然后它就可以工作了

_调用(消息, BindingFlags.Instance或BindingFlags.NonPublic, 没有什么, 新对象(){u mailWriter,True,True}, 没有什么 )

Public Sub Save(ByVal Message As MailMessage, ByVal FileName As String)
    Dim assembly As Assembly = GetType(SmtpClient).Assembly
    Dim _mailWriterType As Type = assembly.[GetType]("System.Net.Mail.MailWriter")

    Try



        Using _fileStream As New FileStream(FileName, FileMode.Create)
            ' Get reflection info for MailWriter contructor
            Dim _mailWriterContructor As ConstructorInfo = _mailWriterType.GetConstructor(BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, New Type() {GetType(Stream)}, Nothing)

            ' Construct MailWriter object with our FileStream
            Dim _mailWriter As Object = _mailWriterContructor.Invoke(New Object() {_fileStream})

            ' Get reflection info for Send() method on MailMessage
            Dim _sendMethod As MethodInfo = GetType(MailMessage).GetMethod("Send", BindingFlags.Instance Or BindingFlags.NonPublic)

            ' Call method passing in MailWriter
            **_sendMethod.Invoke(Message,
                               BindingFlags.Instance Or BindingFlags.NonPublic,
                               Nothing,
                               New Object() {_mailWriter, True},
                               Nothing
                               )**

            '_sendMethod.Invoke(Message, BindingFlags.Instance Or BindingFlags.NonPublic, Nothing,
            ' Finally get reflection info for Close() method on our MailWriter
            Dim _closeMethod As MethodInfo = _mailWriter.[GetType]().GetMethod("Close", BindingFlags.Instance Or BindingFlags.NonPublic)

            ' Call close method
            _closeMethod.Invoke(_mailWriter, BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, New Object() {}, Nothing)
        End Using


    Catch ex As Exception

    End Try
End Sub