单个产品上的 50 个实例的 Web 配置转换,没有 50 个转换文件

Web config transform for 50 instances which are on single product, with out having 50 transform files

我是网络配置转换的新手。我们有一个产品被 50 个客户使用。我们正朝着自动部署过程迈进。因此,我们希望在部署期间使用配置转换来更改连接字符串、WCF 服务端点和少量密钥。但是根据我在 google 上的研发,我有一个解决方案可以通过维护 50 个转换文件来实现这一点。是否有任何过程可以用较少数量的转换文件来实现这一点。

请建议我如何实现。

注意:这里我会为每个实例设置不同的连接字符串,不同的WCF服务端点。

您应该考虑在发布过程中使用标记化,而不是在构建过程中设置任何真实的连接字符串、主机名等。

例如,您的 *.Release.config 转换文件可能如下所示:

<appSettings xdt:Transform="Replace">
    <add key="DbConnectionString" value="__ConnectionString__"/>
</appSettings>

和 after/during 部署,然后您可以将所有这些值替换为给定环境的参数。 使用这种方法,您还可以将相同的构建重新部署到另一个环境,因为您还没有修改构建。

如果您使用 TFS 进行部署,请查看 this。有一个 "Replace Tokens" 任务。 但您也可以使用任何其他系统执行此操作。

通过使用以下 (Referenced) 强大的 shell 脚本,我们无需在 web.config 下的构建中添加 50 个文件,也无需在构建中提交这些文件。

我们可以直接在集中式服务器中维护这些转换配置

function applyConfigTransformation($src,$xdt,$dst)
{
    Add-Type -Path "D:\Microsoft.Web.XmlTransform.dll"

    try 
    {
        Write-Host 'applyConfigTransformation - Called'
        Write-Host $src
        $doc = New-Object Microsoft.Web.XmlTransform.XmlTransformableDocument
        $doc.PreserveWhiteSpace = $true
        Write-Host 'applyConfigTransformation - Load Called'
        $doc.Load($src)
        Write-Host 'applyConfigTransformation - Load completed'

        $trn = New-Object Microsoft.Web.XmlTransform.XmlTransformation($xdt)

        if ($trn.Apply($doc))
        {
            Write-Host 'applyConfigTransformation - $trn.Apply called'
            $doc.Save($dst)
            Write-Output "Output file: $dst"
            Write-Host 'applyConfigTransformation - $trn.Apply completed'
        }
        else
        {
            throw "Transformation terminated with status False"
        }
    }
    catch
    {
        Write-Output $Error[0].Exception
    } 
}

$src = "D:\web.config"
$xdt = "D:\web1.config"
$dst = "D:\web2.config"
applyConfigTransformation $src $xdt $dst