0

Я использую скрипт PowerShell для автоматического шифрования определенных разделов моего web.config после развертывания моего WebApplication с помощью управления выпуском. В этом сценарии PowerShell я использую Aspnet_regiis.exe для выполнения шифрования для меня следующим образом:Использование aspnet_regiis.exe для шифрования web.config изменяет знак евро на тарабарщину

$AspNetRegIisLocation = "C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe" 
& $AspNetRegIisLocation -pef $configSection $configPath 

$configSection С и $configPath быть правильно определена, так как шифрование успешно работает. К сожалению, это приводит к тому, что знак евро в одном из незашифрованных разделов может быть поврежден с <sharedSettings currencyFormat="{0:€ #,##0}" /> до <sharedSettings currencyFormat="{0:€ #,##0}" />.

Я попытался выйти из знака евро как &#8364; и установить encoding="utf-8" как вкл, так и в верхней части моего web.config. Ни один из этих решений не работал, и я немного потерял то, что я могу сделать, чтобы это не произошло снова, за исключением того, что скрипт копировал все разделы до шифрования и повторного вставки незашифрованных разделов.

Редактировать: Когда этот раздел также зашифрован, отображаемый текст на веб-сайте также «поврежден», что означает, что решение «вставить незашифрованные разделы позже» не решит случай, когда проблема возникает в зашифрованном виде раздел.

ответ

0

Оказывается, проблема не в использовании aspnet_iisreg, а в методе чтения в web.config в моем PowerShell перед его использованием.

aspnet_iisreg требует обхода для шифрования пользовательских разделов конфигурации, если их тип находится в DLL, не загруженной в GAC; вам необходимо временно удалить или прокомментировать элемент configSections, в котором они были определены.

К сожалению, я использовал [xml](Get-Content $webConfigLocation) для чтения в web.config (что не вызвало проблем раньше, поэтому я ошибочно обвинил aspnet_iisreg). Вместо этого я должен был использовать $configXml = [xml](Get-Content -Encoding UTF8 $webConfigLocation), чтобы заставить его использовать кодировку UTF-8.

Сценарий затем удалит элемент configSections с разделами, которые необходимо зашифровать, и сохранить их, развращая знак евро в процессе. После шифрования конфигураций с помощью aspnet_iisreg он снова прочитает web.config, добавит ранее удаленные элементы и, наконец, сохранит его, вызывая дополнительную итерацию коррупции.

На всякий случай, когда кто-либо совершает подобную глупую ошибку, этот ответ может предоставить им возможное решение.

Смежные вопросы