works visual studio que microsoft manager how nuget nuget-package

visual - nuget que es



¿Puede NuGet editar un archivo de configuración o solo agregarlo? (4)

He estado trabajando en un paquete NuGet para mi empresa y uno de los requisitos es poder actualizar algunos de nuestros archivos de configuración.

Sé que es posible agregar a un archivo de configuración, pero ¿es posible editar uno?

Ejemplo:

<add name="conn" connectionString="Data Source=./;Initial Catalog=DB;Integrated Security=True" />

cambios a continuación

<add name="conn" connectionString="Data Source=./;Initial Catalog=DB;User ID=ex;Password=example" />


A partir de NuGet 2.6 y superiores, puede transformar realmente los archivos Web.config utilizando la sintaxis XDT que se usa para las transformaciones Web.config en Visual Studio.

Consulte http://docs.nuget.org/docs/creating-packages/configuration-file-and-source-code-transformations :

Soporte para XML-Document-Transform (XDT)

A partir de NuGet 2.6, se admite XDT para transformar archivos XML dentro de un proyecto. La sintaxis XDT se puede utilizar en los archivos .install.xdt y .uninstall.xdt debajo de la carpeta Contenido del paquete, que se aplicarán durante la instalación del paquete y el tiempo de desinstalación, respectivamente.

Por ejemplo, para agregar MyNuModule al archivo web.config como se ilustra arriba, la siguiente sección se puede usar en el archivo 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>

Por otro lado, para eliminar solo el elemento MyNuModule durante la desinstalación del paquete, la siguiente sección se puede usar en el archivo 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>


Las transformaciones de NuGet no pueden editar los valores existentes. Pero NuGet le permite ejecutar los scripts de Powershell en la instalación del paquete, por lo que puede editar el archivo de configuración de esa manera.

Crea un archivo Install.ps1 y usa este código:

# 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)


Sí, es posible, pero debe incluir el archivo install.ps1 en la carpeta de herramientas . Y luego, cuando obtenga su paquete del servidor nuget, Visual Studio ejecutará los scripts de Powershell. Yo uso este script

# 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) }


EDITAR: La respuesta ahora es SÍ a partir de NUGET 2.6 y superior.

La respuesta es NO . Desde el sitio de nuget encontré la siguiente respuesta:

"Cuando NuGet combina un archivo de transformación en el archivo de configuración de un proyecto, solo agrega elementos o agrega atributos a los elementos existentes en el archivo de configuración; no cambia los elementos o atributos existentes de ninguna otra manera".

http://docs.nuget.org/docs/creating-packages/configuration-file-and-source-code-transformations