Добавить веб-ссылку в процессе сборки

У меня есть решение C# в Visual Studio 2005. В одном проекте есть веб-ссылка, которую я должен изменить, когда мне нужно построить проект для определенной среды, вручную удалив ссылку из Visual Studio и добавив новую с помощью то же имя, но с изменением URL.

Я хотел бы сделать этот ручной процесс добавления веб-ссылки не таким утомительным.

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

Я думал о создании события preBuild (возможно, файла .bat), где в зависимости от конфигурации сборки веб-ссылка будет создана правильно.

Я не уверен, как это сделать. У меня есть несколько вопросов по этому поводу:

1) Я мог бы создать разные файлы "app.config", где свойства

<setting name="MyService_serviceagent" serializeAs="String">
      <value>developmentEnvironmentURL</value>
</setting>

будет отличаться в зависимости от среды, и я мог бы скопировать правильный файл app.config в зависимости от выбранной конфигурации.

Будет ли это повторно генерировать файл Reference.cs из веб-ссылки? (думаю нет). Будет ли это проблемой, даже если интерфейс не изменился, или будет достаточно, если я регенерирую веб-ссылку вручную только тогда, когда я хочу регенерировать класс?

2) Плохо ли это делать? Думаете ли вы о каких-либо альтернативах, или проще просто согласиться с тем, что я должен удалить и добавить соответствующую веб-ссылку, когда я хочу построить свое решение, указывающее на определенную среду?

Спасибо за чтение : )

С уважением.


person pablof    schedule 23.04.2013    source источник
comment
Запустите WSDL.exe, чтобы (повторно) создать прокси-классы. (msdn.microsoft.com/en-us/ библиотека/7h3ystb6(v=vs.80).aspx)   -  person Dmitry    schedule 23.04.2013
comment
Одним из решений является использование задачи MSBuild XslTransformation в событии после сборки. Затем создайте один файл xsl для каждой конфигурации. Установите преобразование URL в каждом файле xsl.   -  person emigue    schedule 23.04.2013
comment
@emigue Спасибо. Но похоже, что эта MSBuild xslTransformation работает только с VS 2012.   -  person pablof    schedule 23.04.2013


Ответы (1)


В одном проекте есть веб-ссылка, которую мне нужно изменить, когда мне нужно построить проект для определенной среды, вручную удалив ссылку из Visual Studio и добавив новую с тем же именем, но изменив URL-адрес. [...] Я думал о создании события preBuild, в котором веб-ссылка будет создана правильно.

Я не думаю, что это хорошее или ремонтопригодное решение. Можете ли вы объяснить, почему вам нужно повторно добавить ссылку, если все, что меняется, это URL-адрес? Почему вы не можете просто изменить URL-адрес службы в файле web.config?

В любом случае, если вам необходимо иметь две отдельные ссылки, добавьте их обе, чтобы каждая ссылка на службу могла иметь свою собственную конфигурацию. В конечном итоге вы можете поместить эти ссылки на службы в отдельную библиотеку, на которую вы ссылаетесь из основного проекта. Затем в проекте, которому нужны службы, которые вы выбираете в коде, какую реализацию использовать (это может зависеть, например, от переменных среды для каждого проекта, поэтому вы можете определить время компиляции или просто значение конфигурации, чтобы была выбрана соответствующая служба во время выполнения).

Третье решение может состоять в том, чтобы не создавать ссылку, а использовать ClientBase<T>, где вы создаете прокси во время выполнения.

person CodeCaster    schedule 23.04.2013
comment
Спасибо за ответы. Но необходимость выбирать в коде, какую реализацию использовать, не должна быть опцией, поскольку выбранная среда является решением компиляции и развертывания, а не функцией, которую следует закодировать. Я думаю, что это то, что нужно настроить в процессе сборки. Я хотел бы иметь способ повторно добавить ссылку, потому что второй URL-адрес может указывать на базу данных другой среды (например, производство вместо разработки). Все должно быть одинаково, но перекомпиляция программы для каждой среды с одной и той же версией кода может быть нормальным явлением. - person pablof; 23.04.2013
comment
Вы так и не объяснили, почему повторное добавление ссылки на службу лучше, чем просто изменение URL-адреса в файле web.config. - person CodeCaster; 23.04.2013
comment
(Я думаю, что у меня нет web.config, у меня есть app.config. Это то же самое?). Если мне нужно изменить URL-адрес, я повторно добавляю ссылку на службу, потому что вероятность ошибки (копирование и вставка URL-адреса) меньше, если я выбираю добавить веб-ссылку, вставляю URL-адрес в панель, нажимаю «Перейти», и если он не позволяет мне нажать «Добавить ссылку», значит, ссылка не работает или неверна, и я вижу эту ошибку раньше, чем если бы я вставил URL-адрес в файл конфигурации. Спасибо за ваше время CodeCaster :) - person pablof; 23.04.2013