2016-11-29 28 views
0

將Web應用程序部署到Azure時,可以通過在門戶網站中爲特定Web應用程序設置這些設置來覆蓋連接字符串和應用程序設置正在部署。有什麼方法可以從門戶網站覆蓋web.config的其他部分。我使用Umbraco CMS的插件,該插件要求web.config中的連接字符串不在文件的appSetting部分。 (他們通常將它們保存在另一個文件中,但我已將它們放在web.config中,所以我希望可以從門戶網站設置它們)將Web應用程序部署到Azure時覆蓋web.config的其他部分而不是appSettings和connectionString

以下是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文件的這一部分引用它們?

我知道我可以使用web.config轉換來實現這一點,但這仍然會要求我檢查連接字符串到web.config.release等源代碼管理下,我寧願不要這樣做。

是否有另一種解決方案,我忽略了將執行我想要的任務? (該解決方案託管在VSTS中,因此我可以隨時通過設置鍵添加另一個構建步驟)。這樣,它們最終將與構建配置相關聯,而不是與源代碼管理相關聯。

+0

Azure的Web應用程序不能做到這一點。你只能覆蓋你在那裏看到的東西。 – juunas

+0

那麼你可以將緩存設置的注意力重定向到appSettings部分嗎? –

+0

只有該圖像處理器組件支持該圖像。某些庫允許指定應用程序設置鍵而不是值。 – juunas

回答

0

您可以將PowerShell腳本添加爲構建定義中的其中一個步驟。如果您使用內嵌腳本選項,則不需要在您的回購中包含此腳本。

腳本可能看起來像這樣(我在你的例子中添加了正確的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) 

(我測試過它只能在本地)

相關問題