17

私は会社のNuGetパッケージに取り組んでいますが、要件の1つは、構成ファイルの一部を更新できることです。

設定ファイルに追加できることは知っていますが、編集することはできますか?

例:

<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" />
4

4 に答える 4

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)
于 2011-12-09T17:59:15.743 に答える
16

NuGet 2.6以降では、VisualStudioの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以降、プロジェクト内のXMLファイルを変換するためにXDTがサポートされています。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>
于 2013-10-16T09:19:55.170 に答える
3

編集: NUGET 2.6以降では、答えはYESになりました。

答えはNOです。nugetサイトから、次の回答が見つかりました。

「NuGetが変換ファイルをプロジェクトの構成ファイルにマージする場合、構成ファイル内の既存の要素に要素または属性を追加するだけで、他の方法で既存の要素または属性を変更することはありません。」

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

于 2011-08-01T17:19:14.330 に答える
0

はい、可能ですが、install.ps1ファイルをtoolsフォルダーに含める必要があります。そして、nugetサーバーからパッケージを取得するときに、VisualStudioで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)
}
于 2016-03-16T13:32:15.827 に答える