Во время деплоя требуется изменить некоторые параметры для приложения в файле 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