0

在使用 Release Management 部署 WebApplication 后,我正在使用 PowerShell 脚本自动加密 web.config 的某些部分。在这个 PowerShell 脚本中,我使用 aspnet_regiis.exe 为我执行加密,如下所示:

$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}" />

我尝试将欧元符号转义为并在我的 web.config 顶部&#8364;设置打开和关闭。encoding="utf-8"这些解决方案都不起作用,除了在加密之前复制所有部分并在之后重新插入未加密部分之外,我能做些什么来防止这种情况再次发生,我有点茫然。

编辑:当此部分也被加密时,网站上显示的文本也“损坏”,这意味着“稍后插入未加密部分”的解决方案无法解决问题出现在加密部分的情况。

4

1 回答 1

0

原来问题不在于使用 aspnet_iisreg,而在于在使用之前在我的 PowerShell 中读取 web.config 的方法。

如果自定义配置部分的类型位于未在 GAC 中加载的 dll 中,则 aspnet_iisreg 需要解决方法来加密自定义配置部分;您需要暂时删除或注释掉定义它们的 configSections 元素。

可悲的是,我曾经[xml](Get-Content $webConfigLocation)阅读过 web.config(以前没有引起过麻烦,这就是为什么我错误地归咎于 aspnet_iisreg)。相反,我应该习惯$configXml = [xml](Get-Content -Encoding UTF8 $webConfigLocation)强制它使用 UTF-8 编码。

然后,该脚本将删除 configSections 元素以及必须加密的部分并保存它,从而破坏过程中的欧元符号。使用 aspnet_iisreg 加密配置部分后,它将再次读取 web.config,插入先前删除的元素,然后最后保存它,从而导致额外的损坏迭代。

万一有人犯了类似的愚蠢错误,这个答案可以为他们提供一个可能的解决方案。

于 2015-07-16T08:48:35.077 回答