Слияние ссылок WCF через ILMerge - PullRequest
2 голосов
/ 10 ноября 2019

У меня есть проект WinForm в Visual Studio 2017, где я создал ссылку на конечную точку WCF из файла wsdl службы. Мой проект также использует несколько сторонних dll.

Я хочу, чтобы мой проект был отдельным exe-файлом, который не требует установки, поэтому я использую ILMerge для упаковки своих dll-файлов в один exe-файл.

При запуске моего сжатого exe-файла я получаю исключения об отсутствующих ссылках на конечную точку проекта WCF:

Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт в разделе конфигурации клиента ServiceModel.

Я попытался посмотреть, как добавить ссылки WCF через ILMerge, но не смог найти ничего подходящего. Я также не могу найти ничего WCF, связанного с выходной папкой bin моего проекта.

В настоящее время я использую ILMerge с помощью cmd:

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

Я ищу способ добавить ссылки на WCF вавтономный exe-файл через ILMerge или поиск эталонных выходных данных WCF, сгенерированных Visual Studio, в каталоге bin моего проекта.


Solution

Follow Abraham'sкомментарий , я нашел способ обойти «ссылку на службу».

Я использовал Svcutil.exe, чтобы сгенерировать определения для моей службы и вручную установить привязку к ней следующим образом:

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

Теперь при использовании ILMerge все упаковывается.

1 Ответ

1 голос
/ 12 ноября 2019

При добавлении сервисной ссылки в файлах конфигурации также генерируются дополнительные конфигурации. Следовательно, это может привести к сбою упаковки проекта. Кроме того, мы вручную копируем раздел System.servicemodel в новый проект. Я предлагаю вам изменить способ потребления услуг. ваш проект кажется, что вы звоните в службу, добавив ссылку на службу. это принесет некоторые другие библиотеки классов и ссылки, в результате чего будет сложно упаковать проект.
Пожалуйста, рассмотрите следующий способ вызова сервиса.
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
itполностью инкапсулирует необходимую библиотеку классов в главном проекте.
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...