【问题标题】:Using aspnet_regiis.exe to encrypt web.config changes euro sign to gibberish使用 aspnet_regiis.exe 加密 web.config 将欧元符号更改为乱码
【发布时间】:2015-10-04 02:49:41
【问题描述】:

在使用 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 顶部将 encoding="utf-8" 设置为打开和关闭。这些解决方案都不起作用,除了在加密之前复制所有部分并在之后重新插入未加密部分之外,我能做些什么来防止这种情况再次发生,我有点茫然。

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

【问题讨论】:

    标签: asp.net powershell encryption web-config aspnet-regiis.exe


    【解决方案1】:

    原来问题不在于使用 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,插入先前删除的元素,然后最后保存它,从而导致额外的损坏迭代。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2012-12-12
      • 2016-12-19
      相关资源
      最近更新 更多