覆盖Web.config的其他部分,而不是将Web应用程序部署到Azure时的AppSetting和Connection



在将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)

(我仅在本地进行了测试)

最新更新