wake-up-neo.com

CloudConfigurationManager.GetSetting gibt null zurück

Folgende Anweisungen hier habe ich:

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

Aber connectionString ist null, hier ist meine 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>
20
weston

Das funktioniert auch, wenn der Kommentar nicht passt, da ich einen Verweis auf CloudConfigManager habe:

Wenn Sie eine Anwendung ohne Verweis auf Microsoft.WindowsAzure.CloudConfigurationManager erstellen und sich Ihre Verbindungszeichenfolge in der Datei web.config oder app.config befindet (siehe oben), können Sie ConfigurationManager zum Abrufen der Verbindungszeichenfolge verwenden. Sie müssen Ihrem Projekt einen Verweis auf System.Configuration.dll hinzufügen und eine weitere Namespace-Deklaration dafür hinzufügen:

using System.Configuration;

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

Laut Dokumentation in MSDN http://msdn.Microsoft.com/de-de/library/windowsazure/Microsoft.windowsazure.cloudconfigurationmanager.aspx

Nur die Konfigurationseinstellungen im appSettings-Tag können von CloudConfigurationManager gelesen werden. Wenn sich Ihre Konfigurationseinstellungen in einem anderen Tag befinden, wird beim Aufruf von GetSetting NULL zurückgegeben.

19
Nikolai Joukov

Hatte das gleiche Problem. Verwenden Sie statt einer Verbindungszeichenfolge den Konfigurations-> AppSettings-> Add-Schlüssel wie folgt ...

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

Ich hatte das gleiche Problem. Ich hatte das Projekt aktualisiert, um Azure SDK 2.0 zu verwenden. Ich habe NuGet-Pakete für meine Web- und Arbeiterrollen aktualisiert, aber das Azure-Projekt in Visual Studio war noch in der alten Version.

Um dies zu beheben, klicken Sie mit der rechten Maustaste auf Ihr Azure-Projekt, und wählen Sie Eigenschaften aus. Auf der Registerkarte "Anwendung" wird eine Schaltfläche zum Aktualisieren Ihres Azure SDK angezeigt.

9
Scott Scowden

Nach meinem Verständnis möchte ich darauf hinweisen, dass CloudConfigurationManager.GetSetting web.config untersucht, wenn ein Cloud-Service ausgeht. Es wird in cscfg nachgesehen, wenn Sie sich in einem Cloud-Service befinden.

Bitte verweisen Sie auf diesen Link.

4
Ankur D

Stellen Sie sicher, dass alle Ihre Referenzen synchron sind. Es gibt die 2012-06-Bibliothek und 2012-10. Setzen Sie sie auf Copy Local = true und überprüfen Sie die SDK-Version. Ich beschäftigte mich genau mit dem gleichen Thema und machte mich verrückt. 

4
SocialMitch

Dies ist mir passiert, als ich das Azure SDK auf Version 2.2 aktualisiert habe.

Um dies zu beheben, habe ich die packages.config so geändert, dass eine neuere Version des Azure ConfigurationManagers verwendet wird.

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

Nach diesem Tutorial:

Sie können Konfigurationseinstellungen wie folgt erhalten:

RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString")
3
user888734

Ich habe dasselbe Problem erhalten, nachdem ich meine Azure-Lösung (Web + Worker-Rolle) erneut aufgesucht habe, um sie für Azure 2.5 zu aktualisieren. Wenn Sie die Hilfe für CloudConfigurationManager.GetSetting überprüfen, liest sie unter einer Cloud-Plattform (Azure) aus ServiceConfiguration.csfg. Wenn sie als .net-Web-App ausgeführt wird, liest sie aus der App oder web.config.

Mein Fix bestand also darin, das Startprojekt einfach wieder in das Azure-Cloud-Projekt und nicht in das Webprojekt zu ändern.
Ich bekam Null, weil es auf der falschen Plattform gehostet wurde und aus den .config-Dateien ohne Einstellungen gelesen wurde . (Doh!)

1
Alfontz

Ich hatte das gleiche Problem (zwei Mal). Auch nach dem Neustart von Visual Studio und dem Neustart des Azure-Emulators gibt CloudConfigurationManager.GetSetting ("SettingName") den Wert null zurück.

Ich war mir sicher, dass es schon einmal funktioniert hat und ich hatte das neueste SDK.

Die Lösungen haben also meinen PC neu gestartet und danach gibt CloudConfigurationManager.GetSetting ("SettingName") den richtigen Wert zurück.

1

Ich habe dies nach dem Upgrade des Azure SDK von 2.0 auf 2.2 erhalten. Ich konnte beheben durch:

  1. Klicken Sie mit der rechten Maustaste auf das Azure-Projekt und wählen Sie Eigenschaften aus. Aktualisieren Sie das Azure-SDK gemäß der Registerkarte "Anwendung". (Danke an rattricks Antwort).
  2. Klicken Sie mit der rechten Maustaste, um NuGet-Pakete zu verwalten. Klicken Sie links auf Updates und aktualisieren Sie WindowsAzure.ConfigurationManager.
1
acarlon

Es ist ein alter Thread, aber ich wollte meine Lösung freigeben, wenn das Problem durch die oben genannten Methoden nicht gelöst wird. Stellen Sie dann sicher, dass der Azure Storage Emulator ausgeführt wird, wenn Sie die Anwendung ausführen. Zumindest für mich ist das passiert. Für mich musste ich eine Klasse erstellen, um Emulatorprobleme wie hier erwähnt zu behandeln ...

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");
    }
}
1
user3104116

Ich hatte ganz ähnliche Probleme. Ich habe ein Update von Azure SDK 2.0 auf 2.2 durchgeführt - während dieses Vorgangs habe ich den NuGet Manager verwendet, um Microsoft.WindowsAzure.Storage auf den neuesten Stand zu bringen. Der PackageManager hat Microsoft.WindowsAzure.Configuration automatisch auf 1.8.0.0 aktualisiert. Ich konnte das nicht zum Laufen bringen (es war für .Net 2.0 !?). Nachdem ich alle Referenzen manuell eingestellt habe 

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

alles hat funktioniert.

Ich denke, das liegt an der Art und Weise, wie CloudConfigurationManager.GetSetting die Assembly lädt und die Funktionen (über Reflektion) aufruft.

0
BerndK

Gleich hier nach dem Upgrade des Azure SDK von 2.2 auf 2.3 .:

Klicken Sie mit der rechten Maustaste auf das Azure-Projekt, und wählen Sie Eigenschaften. Klicken Sie auf der Registerkarte "Anwendung" auf "Upgrade ..." (Dank der Antwort von rattrick).

Dann gab es einen weiteren Fehler, der behoben werden konnte: Beim Ausführen des Azure-Projekts im Compute-Emulator wurde eine Ausnahme ausgelöst: System.Configuration.ConfigurationErrorsException wurde nicht behandelt Nachricht: Eine nicht behandelte Ausnahme des Typs 'System.Configuration .ConfigurationErrorsException 'ist in Microsoft.WindowsAzure.ServiceRuntime.dll .__ aufgetreten. Weitere Informationen: konnte nicht erstellt werden.

Im "Error List" -Fenster von VS2013 wurde folgende Warnung angezeigt:

Konflikte zwischen verschiedenen Versionen derselben abhängigen Assembly gefunden. Doppelklicken Sie in Visual Studio auf diese Warnung (oder wählen Sie sie aus und drücken Sie die Eingabetaste), um die Konflikte zu beheben. Andernfalls fügen Sie dem "Laufzeit" -Knoten in der Anwendungskonfigurationsdatei die folgenden Bindungsumleitungen hinzu: C:\Programme (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets 1635

Ich habe VS diese Warnung beheben lassen und alles hat gut funktioniert.

0
huha