我在VisualStudio2017中有一个WinForm项目,其中我从服务的wsdl文件中创建了一个WCF端点引用。我的项目还使用了几个第三方dll。
我希望我的项目是一个不需要安装的独立的exe文件,所以我使用ILMerge将我的dll文件打包到一个exe文件中。
在运行compacted时,我得到了有关WCF项目端点缺少引用的异常:
无法在ServiceModel客户端配置部分找到引用契约的默认端点元素。
我试着查找如何通过ILMerge添加WCF引用,但是找不到任何相关的东西。我也无法在项目的bin输出文件夹中找到任何与WCF相关的内容。
我目前使用的ILMerge是通过cmd:
ILMerge.exe /t:winexe /out:target.exe /targetplatform:v4,<.net v4 path> output.exe dll1.dll ... dlln.dll我正在寻找一种通过ILMerge将WCF引用添加到独立exe的方法,或者在我的项目的bin out目录中定位由Visual生成的WCF引用输出。
溶液
在Abraham's comment之后,我找到了一种解决“服务引用”问题的方法。
我使用Svcutil.exe生成服务的定义,并手动设置绑定如下:
BasicHttpBinding myBinding = new BasicHttpBinding();
myBinding.Security.Mode = BasicHttpSecurityMode.Transport;
EndpointAddress myEndpoint = new EndpointAddress(SERVICE_URL);
SoapServiceClient client = new SoapServiceClient(myBinding, myEndpoint);现在,当使用ILMerge时,所有的东西都打包了。
发布于 2019-11-12 06:21:36
通过添加服务引用,还会在配置文件中生成一些额外的配置。因此,它可能会导致项目包装失败。或者,我们手动将System.servicemodel部分复制到新项目。我建议你改变使用服务的方式。您的项目似乎通过添加服务引用来调用服务。这将带来一些其他类库和引用,这导致很难打包项目。
请考虑以下呼叫服务的方式。
https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-use-the-channelfactory
https://learn.microsoft.com/en-us/dotnet/framework/wcf/samples/channel-factory
它在主项目中完全封装了所需的类库。
如果有什么需要我帮忙的,请随时通知我。
https://stackoverflow.com/questions/58792636
复制相似问题