Как добавить XML-файл в папку App_Data на веб-сайте, а затем изменить его с помощью NuGet?
Я создаю пакет NuGet, который добавляет или изменяет несколько файлов XML. Я хочу, чтобы пакет Nuget добавил, а затем изменил xml-файлы, чтобы пользователю не нужно было ничего делать, чтобы добавить файл, если он не существует. Мне нужно изменить XML-файл, чтобы настроить его для конкретного приложения.
Код, который я использую в файле.nuspec:
<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>
Код с добавит файл, если они не существуют, или изменит их, если они существуют, но не добавит их и не изменит их.
Каждый файл, который я пытаюсь добавить, затем изменить как файл.install.xml.xdt, связанный с ним.
Я использую пользовательский RoleManager. Содержимое XML-файла:
<?xml version="1.0" encoding="utf-8" ?>
<roleManager />
Файл xml.install содержит:
<?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>
Есть ли способ сделать то, что я хочу сделать?
1 ответ
У меня есть предварительный подход к проблеме: создать зависимое решение для добавления файлов.
Зависимое решение имеет следующий раздел nuspec:
<files>
<file src="App_Data\*.xml" target="content\App_Data"/>
</files>
Этот пакет nuget затем отображается в виде зависимости в основной библиотеке как таковой:
<?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>
Единственная проблема, связанная с этим подходом, заключается в том, что вам нужно удалить зависимость или вручную удалить добавленные файлы, чтобы полностью отменить изменения, внесенные в приложение.
Это было бы предпочтительным, поскольку такие изменения могут включать более одной зависимости, если nuspec в основном пакете будет знать достаточно для удаления зависимого пакета.
Кто-нибудь знает, как заставить это сделать это?