Я пытаюсь создать сценарий Powershell для автоматизации изменения строки подключения к нашим развернутым веб-приложениям.
Я пытаюсь использовать WebAdministration
команда Set-WebApplicationProperty
но я получаю сообщение об ошибке Unrecognized element: 'providerOption'
PS IIS:\Sites\Default Web Site\VirtualPath> Set-WebConfigurationProperty "//connectionStrings/*[@name='DefaultConnection']" -Name ConnectionString -Value "<NEW CONNECTION STRING>" -PSPath (Get-Location).Path
Set-WebConfigurationProperty : Filename: \\?\C:\Windows\Microsoft.NET\Framework64\v4.0.30319\CONFIG\web.config
Line number: 53
Error: Unrecognized element 'providerOption'
At line:1 char:1
+ Set-WebConfigurationProperty "//connectionStrings/*[@name='DefaultConnection']" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Set-WebConfigurationProperty], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.IIs.PowerShell.Provider.SetConfigurationPropertyCommand
Я нашел информацию об этой же ошибке в StackOverflow, но, похоже, она связана с исходной версией .NET 4.0: https://stackoverflow.com/questions/21308965/unrecognized-element-provideroption
Дополнительная информация о среде:
ОПЕРАЦИОННЫЕ СИСТЕМЫ: Windows Server 2008 R2
IIS: 7.5
Powershell: v4.0
Версия .NET Framework: 4.5.2
Также стоит отметить, что эта команда отлично работает в Window 8.1, IIS 8.5, Powershell 4.0, .NET 4.5.2.
РЕДАКТИРОВАТЬ: Я догадывался, что сравнил Web.config
указан в ошибке между машиной, которая работает, и машиной, которая не работает. Они идентичны.
Как оказалось, использование Powershell было отвлекающим маневром. IIS использует файлы, расположенные в C:\Windows\System32\inetsrv\config\schema
для проверки различных файлов конфигурации xml, с которыми работает веб-сервер. В IIS 7 и IIS 7.5 FX_schema.xml
отсутствуют декларации для providerOption
.
Моя работа - исправить файл схемы, добавив еще один файл в этот каталог с именем "FX_schema.patch.xml"
со следующим содержанием:
<!--
IIS 7.0 and IIS 7.5 contain incorrect system.codedom sections in their FX_schema.xml files.
This version was taken from IIS 8.5 and contains the correct validations for the default web.config
in the CLR 4.0 folder. This file is only required on Windows Vista, 7, Server 2008 and Server 2008 R2.
-->
<configSchema>
<sectionSchema name="system.codedom">
<element name="compilers">
<collection addElement="compiler" removeElement="remove" clearElement="clear">
<attribute name="language" type="string" isCombinedKey="true" />
<attribute name="extension" type="string" isCombinedKey="true" />
<attribute name="type" type="string" />
<attribute name="warningLevel" type="int" />
<attribute name="compilerOptions" type="string" />
<collection addElement="providerOption" >
<attribute name="name" type="string" isCombinedKey="true" />
<attribute name="value" type="string" isCombinedKey="true" />
</collection>
</collection>
</element>
</sectionSchema>
</configSchema>
Этот файл объединен с существующим FX_schema.xml и позволяет моим WebAdministration
команды для успешного завершения.