Мы используем скрипт PowerShell для запуска инструмента wsdl.exe для нас (или в вашем случае svcutil.exe). Сценарий заканчивается на сервисе и получает новый wsdl и повторно генерирует прокси. Вы можете использовать, чтобы добраться до PS. Единственная хитрость - правильно получить пространство имен, но для этого есть опция wsdl.exe.
<Target Name="UpdateWebReferences">
<Exec WorkingDirectory="$(SolutionRoot)"
Command="$(PS) -Noninteractive -Command $(SolutionRoot)\tools\PowerShell\Compile-Wsdl.ps1 -ukf $(ConfigFilePath)"
Condition=" Exists('$(ConfigFilePath)') And Exists('$(SolutionRoot)\tools\PowerShell\Compile-Wsdl.ps1') " />
Вышесказанное относится к построению вашей команды. Суть функции powershell выглядит следующим образом:
$projectFile = [xml]( Get-Content $projectFilePath )
if ( $projectFile -and $WSDL_LANGUAGE -ne "VB")
{
$ns = $projectFile.Project.PropertyGroup[ 0 ].RootNamespace
}
else
{
$ns = $NAMESPACE_PREFIX
}
foreach( $webRefDir in Get-ChildItem $dir.FullName )
{
$webRefName = $webRefDir.Name
if ( [System.String]::IsNullOrEmpty( $ns ) )
{
$namespace = $webRefName
}
else
{
$namespace = $( "{0}.{1}" -f $ns, $webRefName )
}
Write-Host $( "Compiling Web Reference: {0} using Namespace: {1}..." -f $webRefName, $namespace )
$outputPath = $( "{0}\{1}" -f $webRefDir.FullName,$REFERENCE_FILE )
$xpath = "/configuration/appSettings/add[@key='{0}']" -f $webRefName
if ( $URL_KEY_FILE )
{
$xml = [xml](Get-Content $URL_KEY_FILE)
$url = $xml.SelectSingleNode( $xpath )
if ( $url )
{
$urlOrPath = $url.Value
}
else
{
Write-Warning $( "Could not find key {0} in {1}..." -f $webRefName, $URL_KEY_FILE )
}
}
else
{
$urlOrPath = $( Get-ChildItem $webRefDir.FullName -r -filter "*.wsdl" ).FullName
}
if ( $urlOrPath )
{
wsdl /nologo /language:$WSDL_LANGUAGE /n:$namespace /o:$outputPath /urlkey:$webRefName $urlOrPath
}
Write-Host "....................................................."
}
Все, что для этого требуется, - вы должны зарегистрировать папку «Веб-ссылки». Она перебирает каждый каталог и создает правильное пространство имен. Сценарий длинный, но я бы с удовольствием отправил его по электронной почте.