通过 ILMerge 合并 WCF 引用

Merging WCF references via ILMerge

我在 Visual Studio 2017 年有一个 WinForm 项目,我在其中从服务的 wsdl 文件创建了一个 WCF 端点引用。 我的项目还使用了几个第 3 方 dll。

我希望我的项目是一个不需要安装的独立 exe 文件,所以我使用 ILMerge 将我的 dll 文件打包成一个 exe 文件。

当 运行 我的压缩 exe 时,我收到关于缺少对 WCF 项目端点的引用的异常:

Could not find default endpoint element that references contract in the ServiceModel client configuration section.

我尝试查找如何通过 ILMerge 添加 WCF 引用,但找不到任何相关信息。 我在项目的 bin 输出文件夹中也找不到任何 WCF 相关内容。

我目前通过 cmd 使用 ILMerge:

ILMerge.exe /t:winexe /out:target.exe /targetplatform:v4,<.net v4 path> output.exe dll1.dll ... dlln.dll

我正在寻找一种通过 ILMerge 将 WCF 引用添加到独立 exe 的方法,或者在我的项目的 bin out 目录中找到 Visual Studio 生成的 WCF 引用输出。


解决方案

之后,我找到了解决 'service reference' 问题的方法。

我使用 Svcutil.exe 为我的服务生成定义,并像这样手动设置绑定:

BasicHttpBinding myBinding = new BasicHttpBinding();
myBinding.Security.Mode = BasicHttpSecurityMode.Transport;
EndpointAddress myEndpoint = new EndpointAddress(SERVICE_URL);
SoapServiceClient client = new SoapServiceClient(myBinding, myEndpoint);

现在使用 ILMerge 时一切都会打包。

通过添加服务引用,配置文件中也会生成一些额外的配置。因此,可能会导致项目打包失败。或者,我们手动将 System.servicemodel 部分复制到新项目中。 我建议你改变使用服务的方式。您的项目似乎是通过添加服务引用来调用服务的。这会带来一些其他class库和引用,导致项目难以打包。
请考虑以下调用服务的方式。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-use-the-channelfactory
https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/channel-factory
它完全封装了主项目中所需的 class 库。
如果有什么我可以帮忙的,请随时告诉我。