通过 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 库。
如果有什么我可以帮忙的,请随时告诉我。
我在 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 引用输出。
解决方案
在
我使用 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 库。
如果有什么我可以帮忙的,请随时告诉我。