あなたのリリース定義の変数セクションからの値を注入することによる最後の3つの作業は、率直に言って、私は期間が好きではありません - アプリケーション構成をコード(パスワードを除く)ソース管理された構成ファイル。次に、アプリケーションの展開スクリプトの一部として、PowerShellを使用してトークンを置き換えます。
トークンの置換を実行するために書いた、よく使う機能です。 PowerShellモジュールに入れてもうまく動作しますが、スタンドアロンの機能としてはうまくいきます。展開スクリプトで
function Invoke-ReplaceTokens {
param(
[string]$FileSpec,
[string]$FilePath,
[HashTable]$Values)
try {
$files = gci -Path $FilePath -Filter $FileSpec -Recurse
Write-Output "Found files:"
Write-Output ($files | select-object -expandproperty FullName)
$files | % {
$contents = Get-Content $_.FullName -Raw
$changedContents = $false
foreach ($key in $Values.Keys) {
if ($contents.Contains($key)) {
Write-Output "$($_.FullName) contains `"$key`". Replacing it with `"$($Values[$key])`""
$contents = $contents.Replace($key, $Values[$key])
$changedContents = $true
}
}
if ($changedContents) {
set-content -Path $_.FullName -Value $contents
}
}
}
catch {
Write-Output $_
throw $_
}
}
使用法:
Invoke-ReplaceTokens -FileSpec '*.config' -FilePath 'C:\Location\Of\My\Config\File' -Values @{ '__Token__' = 'ActualValue' }
また、あなたがそれを尋ねたとして、質問は(オフサイトリソースの勧告はオフトピックです)スタックオーバーフローのためにオフトピックですので、私は答えました最初の質問の自然な進化:「展開中に設定ファイルを管理するための良い方法は何ですか?」
更新 - ソリューションにすべての環境固有の設定ファイルを含めた後、別の「ビルド成果物を公開」タスクを作成してサーバーにコピーしました。 PowerShellリリースタスクを追加して、環境固有のファイルを実際のファイルにコピーしました。 "web.config.pre-production"がweb.configにコピーされました。 – Mike