2016-11-29 8 views
0

При развертывании веб-приложений в Azure вы можете переопределить строки подключения и настройки приложения, установив их на портале для конкретного веб-приложения. развертываются. Есть ли способ переопределить другие части web.config с портала. Я использую плагин для CMS Umbraco, который требует строки подключения в файле web.config, которые не находятся в разделе appSetting файла. (они обычно хранят их в другом файле, но я поместил их в web.config, чтобы я мог надежно установить их с портала)Переопределение других частей web.config, а не appSettings и connectionString при развертывании веб-приложений до Azure

Вот пример раздела конфигурации 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> 

Что мне нужно сделать, это установить ключи настройки в разделе кеша выше. Если я не могу напрямую ссылаться на этот раздел в разделе приложений AppSettings порта Azure, могу ли я поместить эти параметры в раздел appSettings файла web.config в качестве ключей и обратиться к ним из этого раздела файла web.config?

Я знаю, что могу использовать преобразования web.config для достижения этого, но это все равно потребует от меня проверки строк подключения в исходном элементе управления под web.config.release и т. Д., И я бы предпочел не делать этого.

Есть ли еще одно решение, которое я пропущу, выполнит задачи, которые я хочу? (Решение размещено в VSTS, поэтому я всегда могу добавить еще один шаг сборки с помощью клавиш настроек там) Таким образом, они будут связаны с конфигурацией сборки, а не с контролем источника.

+0

Azure Web Apps не может это сделать. Вы можете только переопределить материал, который там видите. – juunas

+0

Ну вы можете перенаправить внимание настроек кэшей обратно в раздел appSettings? –

+0

Только если этот компонент изображения поддерживает его. Некоторые библиотеки позволяют указывать ключи приложения вместо значений. – juunas

ответ

0

Вы можете добавить PowerShell Script как один из шагов в определении вашей сборки. Если вы используете встроенный скрипт, вам не нужно иметь этот скрипт в своем репо.

Сценарий может выглядеть так (я добавил правильный 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) 

(я проверил это только локально)