Во время деплоя требуется изменить некоторые параметры для приложения в файле web.config.
Сделать это можно с помощью файла параметров и опции MSDeploy –setParamFile.
Проверяем наличие MSDeploy:
PS C:\> dir 'C:\Program Files (x86)\IIS\Microsoft Web Deploy V3' ... -a--- 3/9/2016 11:05 AM 216440 msdeploy.exe -a--- 4/24/2015 9:26 AM 227 msdeploy.exe.config
Создадим две директории — исходная, Src, из которой будут деплоиться данные, и Dst — которая будет играть роль удалённого сервера:
PS C:\> mkdir C:\WebDeployDemo\Src ... Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 7/7/2016 10:32 AM Src PS C:\> mkdir C:\WebDeployDemo\Dst ... Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 7/7/2016 10:32 AM Dst PS C:\> dir C:\WebDeployDemo ... Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 7/7/2016 10:32 AM Dst d---- 7/7/2016 10:32 AM Src
Создадим web.config в каталоге Src с таким содержимым:
<configuration>
<sites>
<site description="SiteDescription" siteId="SiteId">
<siteSettings BooleanSetting="False" StringSetting="someStringValue"/>
</site>
</sites>
<customSection>
<add value="SomeValue1" enabled="False"/>
<add value="SomeValue2" enabled="True"/>
</customSection>
</configuration>
В каталоге C:\WebDeployDemo создаём файл параметров — Params.xml с таким содержимым:
<parameters>
<parameter name="changeBool" value="True">
<parameterEntry type="XMLFile" scope="web.config$" match="//configuration/sites/site/siteSettings/@BooleanSetting"/>
</parameter>
<parameter name="changeString" value="NewAndChangedValue">
<parameterEntry type="XMLFile" scope="web.config$" match="//configuration/sites/site/siteSettings/@StringSetting"/>
</parameter>
<parameter name="removeSection" value="">
<parameterValidation kind="AllowEmpty" />
<parameterEntry type="XMLFile" scope="web.config$" match="//configuration/customSection"/>
</parameter>
</parameters>
С его помощью мы выполним следующее:
- изменим
BooleanSettingна TRUE; - изменим
StringSettingна NewAndChangedValue; - удалим
customSection.
Установим перменную PATH:
C:\>set PATH=%PATH%;C:\Program Files (x86)\IIS\Microsoft Web Deploy V3
Проверяем MSDeploy:
C:\>msdeploy /? Microsoft (R) Web Deployment Command Line Tool (MSDeploy.exe) Version 7.1.1962.0 Copyright (c) Microsoft Corporation. All rights reserved. MSDeploy.exe <-verb:<name>> <-source:<object>> [-dest:<object>] [args ...] ...
Запускаем:
c:\>msdeploy -verb:sync -source:dirpath=C:\WebDeployDemo\Src -dest:dirpath=C:\We bDeployDemo\Dst -setParamFile=C:\WebDeployDemo\Params.xml Info: Updating file (C:\WebDeployDemo\Dst\web.config). Total changes: 1 (0 added, 0 deleted, 1 updated, 0 parameters changed, 232 bytes copied)
Проверяем:
c:\>type C:\WebDeployDemo\Dst\web.config
<configuration>
<sites>
<site description="SiteDescription" siteId="SiteId">
<siteSettings BooleanSetting="True" StringSetting="NewAndChangedValue" />
</site>
</sites>
И более реальный пример.
Файл web.config содержит connectionStrings для подключения к базам. Требуется изменить их, в зависимости от окружения, на которое выполняется деплой.
Сдержимое web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<remove name="conn1" />
<add name="conn1" connectionString="server=server.database.windows.net;database=devdatabase1;userid=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" />
<add name="conn2" connectionString="server=server.database.windows.net;database=devdatabase2;userid=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" />
<add name="conn3" connectionString="server=server.database.windows.net;database=devdatabase3;userid=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" />
<add name="StorageConnectionString" connectionString="DefaultEndpointsProtocol=http;AccountName=devstorage;AccountKey=devkey" />
</connectionStrings>
</configuration>
Содержимое DEVProperty.xml:
<parameters>
<parameter name="conn1" value="NewConnString">
<parameterEntry type="XMLFile" scope="web.config$" match="//configuration/connectionStrings/add[@name='conn1']/@connectionString"/>
</parameter>
</parameters>
С его помощью мы заменим значение connectionString в name="conn1" на значение «NewConnString«.
Запускаем:
$ msdeploy -verb:sync -source:dirpath=C:\BuildTest\Src -dest:dirpath=C:\BuildTest\Dst -setParamFile=C:\BuildTest\DEVProperty.xml Info: Updating file (C:\BuildTest\Dst\web.config). Total changes: 1 (0 added, 0 deleted, 1 updated, 0 parameters changed, 809 bytes copied)
Проверяем:
$ type Dst\web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<site Setting="ON" />
<remove name="conn1" />
<add name="conn1" connectionString="NewConnString" providerName="System.Data.SqlClient" />
<add name="conn2" connectionString="server=server.database.windows.net;database=devdatabase2;userid=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" />
<add name="conn3" connectionString="server=server.database.windows.net;database=devdatabase3;userid=dbuser;password=dbpass;trusted_connection=False" providerName="System.Data.SqlClient" />
<add name="StorageConnectionString" connectionString="DefaultEndpointsProtocol=http;AccountName=devstorage;AccountKey=devkey" />
</connectionStrings>
</configuration>
Ссылки по теме
Using MSDeploy to update and remove sections in web.config. A simple example




