如何绕过.NET DLL服务参考要求

时间:2017-08-31 20:04:59

标签: c# .net vb.net web-services dll

我在.NET中有一个DLL,它使用WebService(发送电子邮件)。

当我在项目中使用DLL时,它会给我一个错误,除非我再次引用webservice。

我不想在使用DLL的父项目中强制引用它

要调用DLL,我只需执行以下操作:

Try
    Dim x As New clsMail
    Dim y As New clsMail.objMail
    x.SendEmail(y)
Catch ex As Exception
    e = ex.ToString
End Try

这是可能的,因为它已在DLL中引用了吗?

Files

如果我删除主项目中的引用,我会从Common DLL中收到错误。如果我将服务引用添加到主项目,那么错误就会消失。

Error

我希望能够通过使用此DLL和服务来导入DLL而无需进行任何额外的工作。关键是能够将这个DLL导入到许多项目中,而这些项目中没有任何额外的步骤。

提前致谢

最终更新:

添加 MailServer = New Mailserver.Service1SoapClient(New BasicHttpBinding(),New EndpointAddress(“http://webmail/SendEmail.asmx”) 在DLL本身修复此问题。我现在可以在任何项目中使用,而无需在DLL之外引用Web服务

C#版本:

 MailServer.Service1SoapClient MailServer = new MailServer.Service1SoapClient(new BasicHttpBinding(), new EndpointAddress("http://webmail/SendEmail.asmx"));

谢谢

2 个答案:

答案 0 :(得分:4)

您可能不需要添加整个服务引用。添加引用的唯一有用的是在App.config中为您添加程序设置,您不需要它生成的任何文件或类。您需要做的就是复制在WizardCommunications中自动生成的app.config中的配置设置,并将其复制到屏幕截图中的App.config。然后,它将从exe的配置文件中读取设置,并且应该可以正常工作。

您还可以手动硬编码从app.config到您的库的设置(例如它连接的URL)(通过使用允许您传入URL的构造函数),因此它不依赖于它的配置设置。

更新:

要对设置进行硬编码而不是使用Dim MailServer as New MailServerClient并使用Public Sub New()中的构造函数Partial Public Class Service1SoapClient,您需要使用Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress)构造函数。

为此,您需要重新创建dll中app.config文件中定义的设置,并将其作为两个参数传递。以下是一个基本示例,您将需要调整它以满足您的需求

Dim MailServer As New MailServer.Service1Client(New BasicHttpBinding(), New EndpointAddress("http://webmail/SendEmail.asmx"))

一旦你这样做,你可以只引用项目的dll,而不需要运行exe的app.config中的任何内容。

答案 1 :(得分:0)

我建议创建一个包含公共代码的图层,该图层将通过所有解决方案进行共享。

例如,screenshot.common,然后引用该服务,因此您只需要在一个地方引用该服务。然后,只要您需要公共代码,请参考screenshot.common

我希望它有所帮助!