我需要将生产应用程序设置部分保留在Web.config之外; 我不希望密钥和其他秘密信息保存在源代码库中。 但是,如果我使用IIS Mananger编辑应用程序设置,它将更改Web.config,这将在下一次部署时被覆盖。
如何将这些设置保留在部署应用程序附带的Web.config之外? 例如,Azure网站以某种方式完成此操作 – 您在门户中configuration的应用程序设置不存储在Web.config中 – 可以通过FTP下载文件进行确认。 它是如何完成的?
对于web.config中的appSettings和connectionStrings节点,您可以将这些节点移到web.config之外的单独文件中。
在你的web.config中你会有:
<appSettings configSource="appsettings.config"></appSettings>
然后创build一个新的文件appsettings.config:
<?xml version="1.0"?> <appSettings> <add key="foo" value="bar" /> </appSettings>
然后,您必须确保不要在生产服务器和开发环境中部署这些新文件并保持不同。
我的所有web.config文件都从我的部署过程中排除,如果我需要更改它们,则在舞台或生产站点上执行此操作。
除了站点中的web.config文件之外,IIS还有几个全局设置。
%systemroot%\System32\inetsrv\config\applicationHost.config
具有所有全局IIS设置,具体取决于您的Feature Delegation设置,这些设置可以在您的本地web.config(s)中被覆盖。 但是,您可以通过在服务器级别上的function委派中将function设置为“只读”来防止此问题。
对于dot.NET相关的设置,有两个全局文件:
%systemroot%\Microsoft.NET\Framework??\v?.?.????\CONFIG\machine.config %systemroot%\Microsoft.NET\Framework??\v?.?.????\CONFIG\web.config
这些文件有几个版本,每个OS平台的每个框架版本都有一个版本。
在这些文件中完成的任何设置都将由本地web.configinheritance。
但是我不认为有一种方法可以防止本地web.config覆盖全局文件中设置的设置。