问题描述
我想用powershell作为我们自动构建过程的一部分,以在部署到测试环境的同时更新app.config文件.我该怎么办?
给定此示例app.config:c:\ sample \ app.config:给定<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="dbConnectionString" connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=True"/> </connectionStrings> </configuration>
以下脚本,c:\ sample \ script.ps1,将读写设置:
# get the directory of this script file $currentDirectory = [IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Path) # get the full path and file name of the App.config file in the same directory as this script $appConfigFile = [IO.Path]::Combine($currentDirectory, 'App.config') # initialize the xml object $appConfig = New-Object XML # load the config file as an xml object $appConfig.Load($appConfigFile) # iterate over the settings foreach($connectionString in $appConfig.configuration.connectionStrings.add) { # write the name to the console 'name: ' + $connectionString.name # write the connection string to the console 'connectionString: ' + $connectionString.connectionString # change the connection string $connectionString.connectionString = 'Data Source=(local);Initial Catalog=MyDB;Integrated Security=True' } # save the updated config file $appConfig.Save($appConfigFile)
执行脚本:
PS C:\Sample> .\Script.ps1
输出:
name: dbConnectionString connectionString: Data Source=(local);Initial Catalog=Northwind;Integrated Security=True
更新了c:\ sample \ app.config:
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="dbConnectionString" connectionString="Data Source=(local);Initial Catalog=MyDB;Integrated Security=True" /> </connectionStrings> </configuration>
其他推荐答案
代码可以更短(基于Robin的App.config):
$appConfig = [xml](cat D:\temp\App.config) $appConfig.configuration.connectionStrings.add | foreach { $_.connectionString = "your connection string" } $appConfig.Save("D:\temp\App.config")
问题描述
I'd like to use PowerShell as part of our automated build process to update an App.config file while deploying into our test environment. How can I do this?
推荐答案
Given this sample App.config: C:\Sample\App.config:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="dbConnectionString" connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=True"/> </connectionStrings> </configuration>
The following script, C:\Sample\Script.ps1, will read and write a setting:
# get the directory of this script file $currentDirectory = [IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Path) # get the full path and file name of the App.config file in the same directory as this script $appConfigFile = [IO.Path]::Combine($currentDirectory, 'App.config') # initialize the xml object $appConfig = New-Object XML # load the config file as an xml object $appConfig.Load($appConfigFile) # iterate over the settings foreach($connectionString in $appConfig.configuration.connectionStrings.add) { # write the name to the console 'name: ' + $connectionString.name # write the connection string to the console 'connectionString: ' + $connectionString.connectionString # change the connection string $connectionString.connectionString = 'Data Source=(local);Initial Catalog=MyDB;Integrated Security=True' } # save the updated config file $appConfig.Save($appConfigFile)
Execute the script:
PS C:\Sample> .\Script.ps1
Output:
name: dbConnectionString connectionString: Data Source=(local);Initial Catalog=Northwind;Integrated Security=True
Updated C:\Sample\App.config:
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="dbConnectionString" connectionString="Data Source=(local);Initial Catalog=MyDB;Integrated Security=True" /> </connectionStrings> </configuration>
其他推荐答案
The code can be much more shorter (based on Robin's app.config):
$appConfig = [xml](cat D:\temp\App.config) $appConfig.configuration.connectionStrings.add | foreach { $_.connectionString = "your connection string" } $appConfig.Save("D:\temp\App.config")