我在 .NET 中有一个 DLL,它使用 WebService(用于发送电子邮件)。
当我在项目中使用 DLL 时,除非再次引用 Web 服务,否则会出现错误。
我不想被迫在使用 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"));
谢谢
最佳答案
您可能不需要添加整个服务引用。添加引用的唯一有益之处是在 App.config 中为您的程序添加设置,您不需要它生成的任何文件或类。您所需要做的就是复制 WizardCommunications 中自动生成的 app.config
中的配置设置,并将其复制到屏幕截图中的 App.config
中。然后它将从 exe 的配置文件中读取设置并且应该可以工作。
您还可以手动将 app.config 中的设置(例如它连接到的 URL)硬编码到您的库中(通过使用允许您传入 URL 的构造函数),这样它就不会依赖于其配置设置。
更新:
对设置进行硬编码,而不是使用 Dim MailServer as New MailServerClient
并使用 Partial Public Class Service1SoapClient
中的构造函数 Public Sub New()
您需要改用 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 中的任何内容。
关于c# - 如何绕过 .NET DLL 服务引用要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45989265/