2009-02-19 6 views
3

Je pense que le titre de la question résume parfaitement ce que je recherche. J'ai une application web et un service et je voudrais que le script de construction vérifie si le service a été mis à jour depuis la dernière version et si c'est le cas, exécutez le script "mise à jour du service" disponible lorsque vous faites un clic droit sur un service .Est-il possible de mettre à jour une référence de service WCF dans un projet de déploiement Web?

Des idées?

Répondre

1

Nous utilisons un script PowerShell pour exécuter l'outil wsdl.exe pour nous (ou dans votre cas svcutil.exe). Le script se termine au service et tire un nouveau wsdl et re-gens le proxy. Vous pouvez utiliser pour accéder à PS. La seule astuce consiste à obtenir le namespacing correctement, mais il existe une option sur wsdl.exe pour cela.

<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') " /> 

GOES ci-dessus lors de la construction de l'équipe. La viande de la fonction Powershell est comme suit:.

$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 "....................................................." 
} 

Tout ce qui est nécessaire pour cela vous devez avoir le dossier « Références Web » réinsérée Il boucle sur chaque répertoire et crée l'espace de noms correct. Le script est long, mais je serais prêt à l'envoyer par courriel.

+0

pouvez-vous fournir un exemple de code? – Jaguar

1

Je ne suis pas sûr, mais je pense qu'il existe un moyen de le faire via le SDK Visual Studio. Je rappelle que, par exemple, il existe un modèle d'objet que vous pouvez référencer pour afficher la boîte de dialogue "Ajouter une référence Web". Sans doute, vous pouvez également faire une "mise à jour Web Reference". Il devrait alors être possible de créer une tâche MSBUILD qui le fera pour vous.

Vous devriez également considérer que de telles tâches existent déjà. Vérifiez sur Codeplex et d'autres lieux similaires pour les collections publiques de tâches MSBUILD, dont certaines peuvent aider.

Questions connexes