Короткая, короткая версия
Может wsdl.exe
создавать точно такие же файлы что делает Visual Studio при добавлении веб-ссылки?
В качестве альтернативы:
Какие команды Windows CMD будут имитировать действия Visual Studio при добавлении веб-ссылки?
Немного больше деталей
У меня есть проект VS2015, в котором используется веб-ссылка: https://webservices.netsuite.com /wsdl/v2016.xsd
0/netsuite.wsdl (NetSuite — бле).
Я могу добавить ссылку на веб-службу в Visual Studio («Проект» -> «Добавить ссылку на службу» -> «Дополнительно» -> «Добавить веб-ссылку» -> «Ввести URL-адрес» -> «Добавить ссылку»), и она сгенерирует целую кучу файлов .xsd
и .datasource
:
Все полезно и радует. Ура.
Однако, когда я использую WSDL.exe
, он генерирует только один файл: NetSuiteService.cs
:
C:\CSharpPlayground\CSharpPlayground>mkdir "Web References\com.netsuite.webservices"
C:\CSharpPlayground\CSharpPlayground>wsdl.exe /:"Web References\com.netsuite.webservices" "https://webservices.netsuite.com/wsdl/v2016_2_0/netsuite.wsdl"
Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 4.6.1055.0]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'C:\CSharpPlayground\CSharpPlayground\NetSuiteService.cs'.
Я перелил wdsl.exe /?
и не нашел ничего похожего, что могло бы мне помочь.
Разве wsdl.exe
не подходит для этой работы?
Задний план
Я пытаюсь заставить сборки CI работать для моего проекта (мы самостоятельно размещаем экземпляр GitLab, поэтому я м с помощью gitlab-ci). Проект отлично строится на моем компьютере для разработки, потому что все эти файлы .xsd
и .datasource
существуют.
Однако они не существуют на машине сборки. Я обнаружил, что могу обновить данные WSDL с помощью цели/задачи MSBuild благодаря этому ответу. Поэтому я добавил это в свой файл .csproj
, и он успешно загружает данные из NetSuite — только в один файл .cs, а не в коллекцию. Таким образом, сборка терпит неудачу.
Я мог бы просто зарегистрировать все файлы веб-ссылок на git, но я бы предпочел не делать этого, если в этом нет крайней необходимости.
Обновление 1 (13 марта 2017 г., 15:56 по тихоокеанскому времени)
@RasmusW ниже упомянул более новую утилиту scvutil.exe
. Это часть пути - он генерирует отдельные файлы .xsd
(файлы .datasource
могут не понадобиться).
Однако сгенерированные файлы .xsd
названы неправильно. Они используют значение namespace
, а не значение schemaLocation
.
Например, в файле .wsdl, предоставленном NetSuite, мы имеем:
<xsd:import namespace="urn:types.accounting_2015_2.lists.webservices.netsuite.com" schemaLocation="https://webservices.netsuite.com/xsd/lists/v2015_2_0/accountingTypes.xsd"/>
Сгенерированный файл имеет номер types.accounting_2015_2.lists.webservices.netsuite.com.xsd
, а не accountingTypes.xsd
.
Кроме того, есть и другие файлы, созданные VS2015:
NetSuiteService.cs
- This I can get by using
wsdl.exe /out:"Web References\com.netsuite.webservices\\" https://webservices.netsuite.com/wsdl/v2015_2_0/netsuite.wsdl
. It returns the exact same file as what VS2015 creates.
- This I can get by using
Reference.cs
- No idea what this really is or how it's generated. It appears to be very similar to what's in NetSuiteService.cs though.
Reference.map
- This is an xml file that has a bunch of
DiscoveryClientResult
items that map a url to a filename. I assume that this is how Visual Studio gets the names for the .xsd files, but I'm not sure. - Выглядит примерно так:
<DiscoveryClientResult referenceType="System.Web.Services.Discovery.SchemaReference" url="https://webservices.netsuite.com/xsd/lists/v2015_2_0/accountingTypes.xsd" filename="accountingTypes.xsd" />
- This is an xml file that has a bunch of