2011-08-30 4 views
0

J'essaie, sans trop de chance, de créer un fichier chauve-souris ou un fichier cmd qui changerait un hintpath "corrompu" de ma DLL tierce afin qu'il se réfère à mon chemin dll fixe (le P-drive). Le script doit: 1) faire une boucle dans tous les dossiers sous mon dossier de projets principal trouver tous les fichiers avec la fin .csproj 2) faire une boucle dans chaque fichier et remplacer chaque instance de "< HintPath> c: \ xx \ yy \ q .dll </HintPath> » à "< HintPath> P: \ q.dll </HintPath>"Script Cmd pour définir le hintpath dans les projets .net

grâce,

salutations, styrmir

Répondre

2

Si possible, je vous suggère fortement d'utiliser PowerShell pour effectuer cette tâche. Voici ce qu'il faudrait faire ce que vous recherchez:

Get-ChildItem -Recurse -Filter *.csproj -Path YOUR_TARGET_ROOT_DIRECTORY_HERE | 
    ForEach-Object { 
     (Get-Content $_.FullName) | 
     ForEach-Object { 
      $_.Replace('<HintPath>c:\xx\yy\q.dll</HintPath>', '<HintPath>P:\q.dll</HintPath>') 
     } | 
     Set-Content $_.FullName -WhatIf 
    } 

Note: J'ai inclus un -whatIf commutateur qui empêche le script d'apporter des changements et produit juste les actions qu'il effectuerait à la console fenêtre. Veuillez le supprimer pour rendre le script fonctionnel.

MISE À JOUR

Pour remplacer tous les possibles HintPath référence à q.dll au sein C:, à chaque profondeur de répertoire possible, vous pouvez remplacer cette ligne:

$_.Replace('<HintPath>c:\xx\yy\q.dll</HintPath>', '<HintPath>P:\q.dll</HintPath>') 

avec celui-ci:

$_ -replace '\<HintPath\>C:\\.*\\q.dll\</HintPath\>', '<HintPath>P:\q.dll</HintPath>' 
+0

t Rings pour la réponse. Je vais essayer cela en utilisant la powershell. Juste par curiosité, savez-vous comment je modifierais le script suggéré pour que \ xx \ yy soient des jokers de longueur différente - c.-à-d. Que certains chemins soient c: \ xx \ yy \ q.dll alors que d'autres pourraient être c: \ zz \ rr \ mm \ dd \ o.dll? – styrmiro

+0

Vous êtes les bienvenus, j'ai mis à jour ma réponse pour correspondre à votre nouvelle réponse. –

Questions connexes