2017-07-19 1 views
0

Ich bin ein NuGet-Paket erstellen, die mehrere XML-Dateien hinzugefügt oder ändert. Ich möchte, dass das Nuget-Paket die XML-Dateien hinzufügt und anschließend ändert, sodass der Benutzer nichts tun muss, um die Datei hinzuzufügen, wenn sie nicht existiert. Ich muss die XML-Datei ändern, um sie für die spezifische Anwendung anzupassen.Wie fügen Sie eine XML-Datei zum Ordner App_Data einer Website und dann ändern Sie sie mit NuGet

Der Code, den ich in der .nuspec Datei verwende ist:

<files> 
    <file src="web.config.*.xdt" target="content"/> 
    <file src="App_Data\*.xml" target="content\App_Data"/> 
    <file src="App_Data\*.xml.*.xdt" target="content\App_Data"/> 
    <file src="favicon.ico" target="content\favicon.ico"/> 
    </files> 

Der Code mit der Datei hinzufügen, wenn sie nicht existieren, oder sie ändern, wenn sie es tun, aber es wird sie nicht hinzufügen und dann modifiziere sie.

Jede Datei, die ich hinzufügen möchte, wird dann als zugehörige .install.xml.xdt-Datei geändert.

Ich verwende einen benutzerdefinierten RoleManager. Die XML-Datei Inhalte sind:

<?xml version="1.0" encoding="utf-8" ?> 
<roleManager /> 

Die xml.install Datei enthält:

<?xml version="1.0" encoding="utf-8" ?> 
<roleManager xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" 
     xdt:Transform = "SetAttributes(defaultProvider,enabled,cacheRolesInCookie,cookieProtection)" 
     defaultProvider="RoleProvider" 
     enabled="true" 
     cacheRolesInCookie="true" 
     cookieProtection="All" > 
    <providers xdt:Transform="Insert" > 
    <clear /> 
    <add name="RoleProvider" type="Library.RoleProvider" applicationName="$RootNamespace$" /> 
    </providers> 
</roleManager> 

Gibt es eine Möglichkeit zu erreichen, was ich tun will?

Antwort

0

Ich habe einen vorläufigen Ansatz für das Problem: Erstellen Sie eine abhängige Lösung, um die Dateien hinzuzufügen.

Die abhängige Lösung hat folgenden nuspec Abschnitt:

<files> 
    <file src="App_Data\*.xml" target="content\App_Data"/> 
    </files> 

Dieses nuget Paket dann als eine Abhängigkeit in der Hauptbibliothek als solche aufgeführt ist:

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
    <metadata> 
    <id>$id$</id> 
    <version>$version$</version> 
    <title>$title$</title> 
    <authors>Timothy R Dooling</authors> 
    <owners>$author$</owners> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>$description$</description> 
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes> 
    <copyright>Copyright 2017</copyright> 
    <file src="App_Data\*.xml" target="content\App_Data"/> 
    <dependencies> 
     <dependency id="LibraryCore" version="1.0.0" /> 
    </dependencies> 
    </metadata> 
    <files> 
    <file src="web.config.*.xdt" target="content"/> 
    <file src="App_Data\*.xml.*.xdt" target="content\App_Data"/> 
    <file src="favicon.ico" target="content\favicon.ico"/> 
    </files> 
</package> 

Der einzige Ärger mit diesem Ansatz ist, dass Sie die Abhängigkeit deinstallieren oder die hinzugefügten Dateien manuell löschen müssen, um die an der Anwendung vorgenommenen Änderungen vollständig rückgängig zu machen.

Es wäre vorzuziehen, da solche Änderungen mehr als eine Abhängigkeiten beinhalten könnten, wenn die nuspec im Hauptpaket genug wissen würde, um das abhängige Paket zu deinstallieren.

Wer weiß, wie man es dazu bringt?

+0

Ich fand die Antwort auf meine eigene Frage dazu. Die folgende Zeile entfernt die Abhängigkeiten: uninstall-package library -removedependencies –

Verwandte Themen