Подтвердить что ты не робот

CloudConfigurationManager.GetSetting возвращает null

Следующие инструкции здесь У меня:

var connectionString = CloudConfigurationManager.GetSetting("StorageConnectionString");

Но connectionString есть null, вот мой app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <connectionStrings>
    <add name="StorageConnectionString"
         connectionString="DefaultEndpointsProtocol=https;AccountName=storage;AccountKey=key" />
  </connectionStrings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.0.0" newVersion="5.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
4b9b3361

Ответ 1

Ну, это работает, даже если комментарий не подходит, потому что у меня есть ссылка на CloudConfigManager:

Если вы создаете приложение без ссылки на Microsoft.WindowsAzure.CloudConfigurationManager, а строка подключения находится в файле web.config или app.config, как показано выше, вы можете использовать ConfigurationManager для извлечения строки подключения. Вам нужно будет добавить ссылку на System.Configuration.dll в свой проект и добавить для него другое объявление пространства имен:

using System.Configuration;

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);

Ответ 3

Была та же проблема. Вместо использования строки подключения используйте ключ конфигурации- > appSettings- > add, подобный этому...

<configuration>
    <appSettings>
        <add key="StorageConnectionString" value="[ConnectionStringHere]" />
    </appSettings>
</configuration>

Ответ 4

У меня была та же проблема. Я обновил проект для использования Azure SDK 2.0. Я обновил пакеты NuGet для своих веб-и рабочих ролей, но проект Azure в Visual Studio все еще находился в старой версии.

Чтобы исправить это, щелкните правой кнопкой мыши проект Azure и выберите "Свойства". На вкладке "Приложение" вы увидите кнопку "Обновить ваш Azure SDK".

Ответ 5

Убедитесь, что все ваши ссылки синхронизированы. Там библиотека 2012-06 и 2012-10 Установите для них "Копировать локально" = "Истина" и проверьте версию SDK. Я имел дело с одним и тем же, повел меня орехами.

Ответ 6

Это случилось со мной, когда я обновил Azure SDK до версии 2.2.

Чтобы исправить это, я изменил package.config, чтобы использовать более новую версию Azure ConfigurationManager.

<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.1.0" targetFramework="net45" />

Ответ 7

Основываясь на моем понимании, я хотел бы указать, что CloudConfigurationManager.GetSetting будет искать в web.config, если у вас заканчивается облачная служба. Он будет смотреть на cscfg, если вы находитесь в облачном сервисе.

Пожалуйста, обратитесь к этому .

Ответ 8

Следуя этому руководству:

Вы можете получить настройки конфигурации следующим образом:

RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString")

Ответ 9

Я получил это после обновления Azure SDK от 2.0 до 2.2. Я смог исправить:

  • Проект Right-Clicking Azure и выбор свойств. Обновите SDK Azure на вкладке "Приложение". (Спасибо rattrick ответ).
  • Щелкните правой кнопкой мыши, чтобы управлять пакетами NuGet. В левой части нажмите "Обновить" и обновите WindowsAzure.ConfigurationManager.

Ответ 10

У меня была такая же проблема (два раза). Даже после перезапуска Visual Studio и после перезапуска эмулятора Azure CloudConfigurationManager.GetSetting( "SettingName" ) возвращает значение null.

Я был уверен, что он работал до этого, и у меня был последний SDK.

Итак, решения перезапустили мой компьютер, и после этого CloudConfigurationManager.GetSetting( "SettingName" ) вернет правильное значение.

Ответ 11

У меня возникла такая же проблема после переустановки моего решения Azure (роль Web + Worker), чтобы обновить его для Azure 2.5. Просмотрев справку для CloudConfigurationManager.GetSetting, если она работает под облачной платформой (Azure), она читает из ServiceConfiguration.csfg, если работает как веб-приложение .net, читает из приложения или web.config.

Итак, я решил просто сменить проект запуска на проект облачного облака, а не на веб-проект.
Я получал null, потому что он размещался на неправильной платформе и читал файлы .config без настроек. (Doh!)

Ответ 12

Это старый поток, но я хотел бы поделиться своим решением, если проблема не устранена вышеупомянутыми методами, а затем убедитесь, что Azure Storage Emulator запущен при запуске приложения; по крайней мере, для меня это произошло. Для меня мне пришлось создать класс для решения проблемы эмулятора, как упоминалось здесь...

http://blog.simontimms.com/2013/08/28/configuration-settings-in-an-azure-worker-role/

class ConfigurationProvider
{
    private static string GetStorageConnectionString(string name)
    {
        try
        {
            return RoleEnvironment.GetConfigurationSettingValue(name);
        }
        catch (SEHException)
        {
            return System.Configuration.ConfigurationManager.ConnectionStrings[name].ConnectionString;
        }
    }

    public static string StorageConnectionString()
    {
        return GetStorageConnectionString("StorageConnectionString");
    }

    public static string DefaultConnection()
    {
        return GetStorageConnectionString("DefaultConnection");
    }
}

Ответ 13

У меня были подобные проблемы. Я обновил с Azure SDK 2.0 до 2.2 - во время этого процесса я использовал NuGet Manager для обновления Microsoft.WindowsAzure.Storage до последнего. PackageManager автоматически выполнил Microsoft.WindowsAzure.Configuration до 1.8.0.0. Мне не удалось это запустить (это было для .Net 2.0!?). После того, как я вручную установил все ссылки в

  • Microsoft.WindowsAzure.Storage 2.1.0.0
  • Microsoft.WindowsAzure.Configuration 2.0.0.0

все сработало.

Я думаю, это связано с тем, как CloudConfigurationManager.GetSetting загружает сборку и вызывает функции (через отражение).

Ответ 14

То же самое происходит после обновления Azure SDK от 2.2 до 2.3.:

Щелкните правой кнопкой мыши проект Azure, выберите "Свойства". На вкладке "Приложение" нажмите "Обновить..." (спасибо ответу rattrick).

Затем была еще одна ошибка: Попытка запустить Azure Project в Compute Emulator сделала исключение: Ошибка System.Configuration.ConfigurationErrorsException была необработанной Сообщение: Необработанное исключение типа "System.Configuration.ConfigurationErrorsException" произошло в Microsoft.WindowsAzure.ServiceRuntime.dll Дополнительная информация: konnte nicht erstellt werden.

В окне "Список ошибок" VS2013 появилось следующее предупреждение:

Найдено конфликты между различными версиями одной и той же зависимой сборки. В Visual Studio дважды щелкните это предупреждение (или выберите его и нажмите Enter), чтобы исправить конфликты; в противном случае добавьте следующие переадресации связывания в "runtime" node в файл конфигурации приложения: C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets 1635

Я разрешаю VS разрешить это предупреждение, и все работает нормально.

Ответ 15

Это сработало для меня...

using System.Configuration;

...

var connectionString = ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;

Ответ 16

У меня была та же проблема. Ни один из советов не работал у меня, но "проблема" была простой. Один простой способ понять, как работает этот класс.

Он не входит в ваш app.config/web.config или везде, где вы сохраняете настройки своего приложения. CloudConfigurationManager работает с ServiceConfiguration.*.cscfg и ServiceConfiguration.csdef. Значение .csdef должно содержать определение параметра, но не его значение в разделе ConfigurationSettings. Сами настройки находятся в файлах .cscfg(в том же разделе, но в том числе и в значении). Я полагаю, что причиной двойного определения является то, что облако и локальные конфигурации имеют одинаковые настройки).

Вы можете установить их либо щелкнув правой кнопкой мыши свою роль в Visual Studio, либо выбрав "Свойства" → "Настройки" (в случае StorageConnectionString просто выберите "Ваша подписка", если ваша учетная запись хранилища подключена к облачной службе) или редактируя их вручную. Если вы испортите настройки, вы получите значок восклицательного знака.

Просто.

Ответ 17

Получалось нулевое значение при передаче литеральной строки после установки Azure SDK 2.6 (ранее работало).

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["AzureStorage"].ConnectionString);

Заменил литеральную строку, и она отлично работала.

   string connectionStr = "AzureStorage";

   var connectionstring = ConfigurationManager.ConnectionStrings[connectionStr].ConnectionString;

   CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionstring);