2015-02-12 1 views
-1
<configuration> 
    <runtime> 
    <assemblyBindings> 
     <dependentAssemblyss> 
     <assemblyIdentity name="A" publicKeyToken="5d861ad8ad8cd06f" culture="neutral" /> 
     <bindingRedirects oldVersion="0.0.0.0-68834.68834.68834.68834" newVersion="4.5.0.103" /> 
     </dependentAssemblys> 
     <dependentAssembly> 
     <assemblyIdentity name="B" publicKeyToken="ae714df8cd90bc8f" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="3.0.0.103" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="C" publicKeyToken="22955931b98512b6" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="8.0.0.103" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="D" publicKeyToken="585a888b4a9ba2e3" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="2.5.0.1286" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /> 
    </startup> 
</configuration> 

Я уже отправил это и есть ответ на этот вопрос ... Я мог бы отправил этот новый вопрос как комментарий к этому, но из-за ограничений CHARS я отправляю его здесьРедактирование XML с помощью PowerShell

Как изменить значение newVersion? A, B будет иметь 0.0.0.1 и C, D будет 0.0.0.2 Спасибо!

+0

Возможный дубликат [Как редактировать XML с помощью Powershell?] (Http://stackoverflow.com/questions/6049323/how-do-i-itit-xml-using-powershell) –

ответ

0

PowerShell довольно гибкий при работе с типами [Xml]. В следующем примере я читаю ваш xml сверху (исправлены некоторые ошибки формата XML), а затем используется массив хэшей ($ replacements), чтобы указать, какие именованные зависимые сборки должны иметь значения newVersion.

[Xml]$doc = @" 
<configuration> 
    <runtime> 
    <assemblyBindings> 
     <dependentAssembly> 
     <assemblyIdentity name="A" publicKeyToken="5d861ad8ad8cd06f" culture="neutral" /> 
     <bindingRedirects oldVersion="0.0.0.0-68834.68834.68834.68834" newVersion="4.5.0.103" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="B" publicKeyToken="ae714df8cd90bc8f" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="3.0.0.103" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="C" publicKeyToken="22955931b98512b6" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="8.0.0.103" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="D" publicKeyToken="585a888b4a9ba2e3" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-65534.65534.65534.65534" newVersion="2.5.0.1286" /> 
     </dependentAssembly> 
    </assemblyBindings> 
    </runtime> 
</configuration> 
"@ 
$replacements [email protected](@{'name'='C'; 'newVersion'='0.0.1'},@{'name'='D'; 'newVersion'='0.0.3'}) 
foreach($replacement in $replacements) 
{ 
    $doc.configuration.runtime.assemblyBindings.dependentAssembly | ` 
    Where-Object -FilterScript {$_.assemblyIdentity.name -eq $replacement.name} |% ` 
    {$_.bindingRedirect.newVersion = $replacement.newVersion} 
} 
#Output the raw xml to show the changes: 
write-host $doc.OuterXml 

в цикле, является переборе элементов в $ замен, а затем найти соответствие dependentAssembly его assemblyIdentity.name, а затем обновляет значение newVersion.