在将Web应用程序部署到Azure时,您可以通过在您部署的特定Web应用程序的门户中设置它们来覆盖连接字符串和应用程序设置。有什么方法可以从门户网站上覆盖Web.config的其他部分。我正在为umbraco cms使用一个插件,该插件需要在文件的"应用程序集"部分中使用Web.config中的连接字符串。(它们通常将它们放在另一个文件中,但是我将它们放在web.config中,以便我可以从门户中设置它们)
这是Web.config的配置部分的示例,仅我指的是:
<configuration>
...A lot of other web.config stuff
<imageProcessor>
<caching currentCache="AzureBlobCache">
<caches>
<cache name="AzureBlobCache" type="ImageProcessor.Web.Plugins.AzureBlobCache.AzureBlobCache, ImageProcessor.Web.Plugins.AzureBlobCache" maxDays="365">
<settings>
<!--Azure Cache Provider-->
<setting key="CachedStorageAccount" value="Azure blob storage key" />
<setting key="CachedBlobContainer" value="cache" />
<setting key="UseCachedContainerInUrl" value="false" />
<setting key="CachedCDNRoot" value="Azure storage account" />
<setting key="CachedCDNTimeout" value="1000" />
<setting key="SourceStorageAccount" value="name=Azure storage account" />
<setting key="SourceBlobContainer" value="media" />
<setting key="StreamCachedImage" value="false" />
</settings>
</cache>
</caches>
</caching>
</imageProcessor>
</configuration>
我想做的是在上面的"缓存"部分中设置设置键。如果我无法在Azure门户网站AppSettings部分中直接引用此部分,则可以将这些设置放在Web.config的appSettings部分中为键,并从Web.config文件的这一部分中参考它们?p>我知道我可以使用web.config变换来实现此目的,但这仍然需要我检查连接字符串在web.config.release等下的源控件中,我更愿意这样做。
我是否忽略了另一个可以执行我想要的任务的解决方案?(该解决方案是在VST中托管的,因此我可以随时使用"设置键"添加另一个构建步骤)这样,它们最终将与构建配置而不是源控件相关联。
您可以将 powershell脚本作为构建定义的步骤之一。如果您使用 inline脚本选项,则不需要在存储库中包含此脚本。
脚本看起来像这样(我添加了一个正确的XPath,如您的示例中所述)。
$path = ".web.config"
$xml = [xml](Get-Content $path)
$dictionary = @{
CachedCDNTimeout = '9000'
}
foreach ($key in $dictionary.Keys)
{
if (($addKey = $xml.SelectSingleNode("//configuration/imageProcessor/caching/caches/cache/settings/setting[@key = '$key']")))
{
$addKey.SetAttribute('value', $dictionary[$key])
}
}
$xml.Save($path)
(我仅在本地进行了测试)