我需要将生产应用程序设置部分保留在 Web.config 之外;我不希望密钥和其他机密信息保留在源代码存储库中。但是,如果我使用 IIS Mananger 编辑应用程序设置,它会更改 Web.config,该设置将在下次部署时被覆盖。
我如何才能将这些设置保留在部署时随应用程序附带的 Web.config 之外?例如,这可以通过 Azure 网站以某种方式完成 - 您在门户中配置的应用程序设置不存储在 Web.config 中 - 可以通过 FTP 下载文件来确认。它是如何做到的?
答案1
对于 web.config 中的 appSettings 和 connectionStrings 节点,您可以将它们移动到 web.config 之外的单独文件中。
在您的 web.config 中您将拥有:
<appSettings configSource="appsettings.config"></appSettings>
然后新建一个文件appsettings.config:
<?xml version="1.0"?>
<appSettings>
<add key="foo" value="bar" />
</appSettings>
然后,您必须确保不要部署这些新文件,并使它们在生产服务器和开发环境中保持不同。
我的所有 web.config 文件都排除在我的部署过程之外,如果我需要更改它们,我会在阶段或生产站点上进行更改。
答案2
除了站点中的 web.config 文件之外,还有几个 IIS 全局设置。
%systemroot%\System32\inetsrv\config\applicationHost.config
具有所有全局 IIS 设置,根据您的Feature Delegation
设置,这些设置可能会在本地 web.config 中被覆盖。但您可以通过在服务器级别的功能委派中将功能设置为“只读”来防止这种情况。
对于 dot.NET 相关的设置,有两个全局文件:
%systemroot%\Microsoft.NET\Framework??\v?.?.????\CONFIG\machine.config
%systemroot%\Microsoft.NET\Framework??\v?.?.????\CONFIG\web.config
这些文件有多个版本,每个操作系统平台的每个框架版本对应一个版本。
这些文件中所做的任何设置都将由您的本地 web.config 继承。
但是我认为没有办法阻止本地 web.config 覆盖全局文件中的设置。