我一直在为我公司制作一个NuGet包,其中一个要求是能够更新我们的一些配置文件。
我知道可以添加到配置文件中,但是可以编辑一个吗?
示例:
<add name="conn" connectionString="Data Source=.\;Initial Catalog=DB;Integrated Security=True" />
更改为
<add name="conn" connectionString="Data Source=.\;Initial Catalog=DB;User ID=ex;Password=example" />
答案 0 :(得分:30)
NuGet转换无法编辑现有值。但NuGet允许您在程序包安装上运行Powershell脚本,因此您可以通过这种方式编辑配置文件。
创建Install.ps1文件并使用以下代码:
# Install.ps1
param($installPath, $toolsPath, $package, $project)
$xml = New-Object xml
# find the Web.config file
$config = $project.ProjectItems | where {$_.Name -eq "Web.config"}
# find its path on the file system
$localPath = $config.Properties | where {$_.Name -eq "LocalPath"}
# load Web.config as XML
$xml.Load($localPath.Value)
# select the node
$node = $xml.SelectSingleNode("configuration/connectionStrings/add[@name='gveconn']")
# change the connectionString value
$node.SetAttribute("connectionString", "Data Source=.\;Initial Catalog=GVE;User ID=ex;Password=example")
# save the Web.config file
$xml.Save($localPath.Value)
答案 1 :(得分:15)
从NuGet 2.6及更高版本开始,您实际上可以使用在Visual Studio中用于Web.config转换的XDT语法来转换Web.config文件。
请参阅http://docs.nuget.org/docs/creating-packages/configuration-file-and-source-code-transformations:
支持XML-Document-Transform(XDT)
从NuGet 2.6开始,支持XDT转换项目中的XML文件。 XDT语法可以在包的Content文件夹下的.install.xdt和.uninstall.xdt文件中使用,该文件将分别在包安装和卸载时应用。
例如,要将MyNuModule添加到web.config文件中,如上所示,可以在web.config.install.xdt文件中使用以下部分:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<modules>
<add name="MyNuModule" type="Sample.MyNuModule" xdt:Transform="Insert" />
</modules>
</system.webServer>
</configuration>
另一方面,要在程序包卸载期间仅删除MyNuModule元素,可以在web.config.uninstall.xdt文件中使用以下部分:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<modules>
<add name="MyNuModule" xdt:Transform="Remove" xdt:Locator="Match(name)" />
</modules>
</system.webServer>
</configuration>
答案 2 :(得分:3)
编辑:从NUGET 2.6及以上版本开始,答案为是。
答案是否。从nuget网站我找到了以下答案:
“当NuGet将转换文件合并到项目的配置文件中时,它只会向配置文件中的现有元素添加元素或添加属性;它不会以任何其他方式更改现有元素或属性。”
击><击> http://docs.nuget.org/docs/creating-packages/configuration-file-and-source-code-transformations 击>
答案 3 :(得分:0)
是的,可以,但您必须将 install.ps1 文件包含到 tools 文件夹中。然后,当您从nuget服务器获取包时,visual studio将运行Powershell脚本。 我用这个脚本
# fileName can be App.Config Or Web.Config or something else
$fileName = "App.Config"
$file=$project.ProjectItems.Item($fileName)
if($file.Properties){
# Get localpath
$localPath = $file.Properties.Item("LocalPath")
if($localPath){
$localPath = $localPath.Value
}
}
if ($localPath -eq $null) {
Exit
}
#Load our config file as XML file
[xml]$file = Get-Content $localPath
if($file){
# Create node
$childNode = $file.CreateElement("add")
$childNode.SetAttribute("connectionString", "DataSource=.\;InitialCatalog=GVE;User ID=ex;Password=example")
#Get parent node
$node = $file.SelectSingleNode("configuration/connectionStrings")
#Insert our node into parent
$node.AppendChild($childNode)
$file.Save($localPath)
}