我在.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中引用了吗?
如果我删除主项目中的引用,我会从Common DLL中收到错误。如果我将服务引用添加到主项目,那么错误就会消失。
我希望能够通过仅使用此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"));
谢谢
答案 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
。
我希望它有所帮助!