Как добавить 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 в основном пакете будет знать достаточно для удаления зависимого пакета.

Кто-нибудь знает, как заставить это сделать это?

Другие вопросы по тегам