Продолжим тему ручного редактирования пакетов (модулей) расширения, начатую в прошлом сообщении. И так вы создали свой пакет расширения при помощи Package Creator'а.
А так как web.config - это XML-файл, то так мы и сделаем:
При помощи файла Install.xsl, мы добавим такой параметр: <authentication mode="Forms"/> - в web.config сайта при условии, что такого параметра там нет.
А при помощи Uninstall.xsl мы удалим этот параметр.
Добавление записи об инсталляторе в install.xml
А теперь добавим в раздел mi:PackageInstaller/mi:PackageFragmentInstallers запись об инсталляторе:
Вы видите, что указание о том, какой файл менять при установке и удалении пакета, дается в XML-элементе XslFile в атрибутах:
И вам нужно добавить параметр в web.config сайта. Как это сделать при установке пакета?
Вы уже знаете, что установкой пакета в C1 занимаются "фрагментарные инсталляторы". Поэтому, все что нам нужно - это добавить запись о нужном инсталляторе в install.xml пакета и сконфигурировать инсталляцию с его помощью.
В С1 есть фрагментарный инсталлятор, который позволяет при установке пакета производить трансформацию указанного XML-файла с помощью XSL-файла, находящегося в пакете - FileXslTransformationPackageFragmentInstaller.
А так как web.config - это XML-файл, то так мы и сделаем:
- создадим XSL-файл(ы) и добавим их в наш пакет
- добавим в install.xml пакета запись о фрагментарный инсталляторе, указав какой XML-файл менять и с помощью какого XSL-файла.
Создание XSL-файлов
Если вы посмотрите внутренности некоторых пакетов C1, которые меняют файлы на сайте при установке, то обычно вы увидите папку Config, в которой присутствуют два файла Install.xsl и Uninstall.xsl. Будем придерживаться обычаев и добавим в пакет такую же папку, а в нее такие же файлы.
Второй файл необязателен и используется тем же фрагментарным инсталлятором при удалении пакета - с его помощью изменения откатываются. "Чистить за собой" - это хорошо, но не всегда можно. При тех же изменениях web.config, некоторые настройки могут использоваться другими пакетами, поэтому их откатывание - не всегда целесообразно.
В качестве содержимого XSL-файлов, я воспользуюсь примерами из оригинальной статьи на английском: Modifying Files.
При помощи файла Install.xsl, мы добавим такой параметр: <authentication mode="Forms"/> - в web.config сайта при условии, что такого параметра там нет.
<?xml version="1.0" encoding="utf-8"?>
<xsl:output method="xml" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="configuration/system.web">
<xsl:copy>
<xsl:if test="count(authentication) = 0">
<authentication mode="Forms" />
</xsl:if>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="configuration/system.web">
<xsl:copy>
<xsl:if test="count(authentication) = 0">
<authentication mode="Forms" />
</xsl:if>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
А при помощи Uninstall.xsl мы удалим этот параметр.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="configuration/system.web/authentication" />
</xsl:stylesheet>
</xsl:stylesheet>
Добавление записи об инсталляторе в install.xml
А теперь добавим в раздел mi:PackageInstaller/mi:PackageFragmentInstallers запись об инсталляторе:
<mi:PackageInstaller xmlns:mi="http://www.composite.net/ns/management/packageinstaller/1.0">
<!-- остальной XML -->
<mi:PackageFragmentInstallers>
<!-- остальной XML -->
<mi:Add installerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FileXslTransformationPackageFragmentInstaller, Composite" uninstallerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FileXslTransformationPackageFragmentUninstaller, Composite">
<XslFiles>
<XslFile pathXml="~\Web.config" installXsl="~\Config\Install.xsl" uninstallXsl="~\Config\Uninstall.xsl" />
</XslFiles>
</mi:Add>
</mi:PackageFragmentInstallers>
</mi:PackageInstaller>
<!-- остальной XML -->
<mi:PackageFragmentInstallers>
<!-- остальной XML -->
<mi:Add installerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FileXslTransformationPackageFragmentInstaller, Composite" uninstallerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FileXslTransformationPackageFragmentUninstaller, Composite">
<XslFiles>
<XslFile pathXml="~\Web.config" installXsl="~\Config\Install.xsl" uninstallXsl="~\Config\Uninstall.xsl" />
</XslFiles>
</mi:Add>
</mi:PackageFragmentInstallers>
</mi:PackageInstaller>
Вы видите, что указание о том, какой файл менять при установке и удалении пакета, дается в XML-элементе XslFile в атрибутах:
- pathXml: относительный (к корню веб-сайта) путь к изменяемому XML-файлу
- installXsl: относительный (к корню ZIP-архива) путь к XSL-файлу, который вносит изменения при установке пакета
- uninstallXsl: относительный (к корню ZIP-архива) путь к XSL-файлу, который вносит изменения при установке пакета. Этот атрибут необязательный. Используйте если у вас есть соответствующий файл.
Вот и все. Теперь при установке пакета, в web.config будет добавлен нужный нам параметр, а при удалении - удален.
Если вы хорошо знаете XSLT, то для вас не составит труда создать нужные XSL-файлы, которые будут не просто добавлять, но и изменять что-то в указанных XML-файлах.
Комментариев нет:
Отправить комментарий