2013-03-13 13 views
18

Seguendo le istruzioni here ho:CloudConfigurationManager.GetSetting ritorno nulli

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

Ma connectionString è null, qui è il mio 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> 

risposta

10

bene funziona, anche se il commento non si adatta, perché ho un ref per CloudConfigManager:

Se si sta creando un'applicazione senza alcun riferimento a Microsoft.WindowsAzure.CloudConfigurationManager, e la vostra la stringa di connessione si trova in web.config o app.config come mostrato sopra, quindi è possibile utilizzare ConfigurationManager per recuperare la stringa di connessione. Sarà necessario aggiungere un riferimento a System.Configuration.dll al progetto e aggiungere un'altra dichiarazione dello spazio dei nomi per esso:

using System.Configuration; 

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

Non capisco perché questa risposta sia corretta.La domanda ha pubblicato riferimenti a CloudConfigurationManager, ma questa soluzione utilizza ConfigurationManager. Non sono la stessa cosa. Nikolai Joukov ha la risposta corretta alla domanda come richiesto, secondo me. – Nathan

+0

@Nathan Mentre la risposta di Nikolai potrebbe spiegare cosa è sbagliato, manca qualsiasi soluzione. – weston

4

Assicurarsi che tutti i riferimenti sono in sincronia. C'è la libreria 2012-06 e 2012-10 Impostarli su Copia Local = true e verificare la versione dell'SDK. Mi sono occupato della stessa identica cosa, mi ha fatto impazzire.

+1

Si è installato tramite NuGet? L'ho fatto e ho Microsoft.WindowsAzure.Storage v2.0.0.0 (.net 4.0) e Microsoft.WindowsAzure.Configuration v1.8.0.0 (.net 3.5) Suona male? – weston

+2

Ho eseguito l'aggiornamento a Windows Azure SDK per .NET - 2.0. Dopo aver aggiornato automaticamente i progetti in azzurro, non ha trovato le stringhe di configurazione. Dopo aver aggiornato manualmente tutti i riferimenti a Microsoft.WindowsAzure.Configuration alla versione 2.0.0.0 (erano 1.8.0.0) ha funzionato. – huha

+0

@weston scusa per la risposta tardiva ... era OOtown ... hai risolto tutto? – SocialMitch

9

Ho avuto lo stesso problema. Ho aggiornato il progetto per utilizzare Azure SDK 2.0. Ho aggiornato i pacchetti NuGet per i miei ruoli web e di lavoro, ma il progetto di Azure in Visual Studio era ancora sulla vecchia versione.

Per risolvere il problema, fare clic con il pulsante destro del mouse sul progetto di Azure e selezionare Proprietà. Sotto la scheda Applicazione, vedrai un pulsante per aggiornare il tuo SDK di Azure.

+1

Questa è la risposta corretta! – BritishDeveloper

+0

il pulsante per l'aggiornamento non è disponibile fino a dopo il download e l'installazione di sdk (facile da fare con il programma di installazione della piattaforma Web) – Jason

-1

Questo ha funzionato per me ...

using System.Configuration; 

...

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

Grazie, anche se è la stessa risposta accettata. – weston

4

Questo è successo a me quando ho aggiornato l'Azure SDK alla versione 2.2.

Per risolvere il problema ho modificato il file packages.config per utilizzare una versione più recente di Azure ConfigurationManager.

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

Ho avuto problemi abbastanza simili. Ho aggiornato da Azure SDK 2.0 a 2.2: durante questo processo ho utilizzato NuGet Manager per aggiornare Microsoft.WindowsAzure.Storage all'ultimo. Il PackageManager ha portato automaticamente Microsoft.WindowsAzure.Configuration a 1.8.0.0. Non ero in grado di farlo funzionare (era per .Net 2.0 !?). Dopo essere stata impostata manualmente tutti i riferimenti a

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

tutto ha funzionato.

Penso che questo sia dovuto al modo in cui CloudConfigurationManager.GetSetting carica l'assembly e chiama i funktions (tramite reflection).

3

A seguito di questo tutorial:

È possibile ottenere le impostazioni di configurazione di questo tipo:

RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString") 
+0

Questo lo ha risolto per me. Forse la chiamata 'CloudConfigurationManager.GetSetting' non esamina più le configurazioni cloud in Azure v2.5. –

1

ho ottenuto questo dopo l'aggiornamento SDK Azure 2,0-2,2. Sono stato in grado di risolvere il problema:

  1. Fare clic con il pulsante destro del mouse sul progetto di Azure e selezionare Proprietà. Aggiorna Azure SDK come indicato nella scheda Applicazione. (Grazie alla risposta di rattrick).
  2. Fare clic con il tasto destro per gestire i pacchetti NuGet. A sinistra, fare clic su Aggiornamenti e aggiornare WindowsAzure.ConfigurationManager.
15

Aveva lo stesso problema. Invece di utilizzare una stringa di connessione, utilizzare il> appSettings- chiave configuration-> aggiungere come questo ...

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

questa non è la risposta – Sushant

+2

Era la risposta per me. Avevo la stringa di connessione nelle impostazioni del progetto di Azure e improvvisamente ha smesso di funzionare per me senza alcuna spiegazione che potessi pensare (nessun aggiornamento ai pacchetti SDK o nuget ecc.). Aggiungere l'app Il settaggio su Web.config ha funzionato anche per me. Grazie per l'aiuto –

+0

Felice di confermare questo consiglio funziona ancora a partire da luglio 2017. Utilizzando VS2017 (Anteprima 15.3) e con una nuova schermata vuota Azure Cloud/ASP.NET WebApp .Net 4.6 il metodo CloudConfigurationManager.GetSetting (..) ha recuperato un Impostazione del file Web.config durante l'esecuzione locale. Dopo una pubblicazione in Azure da VS2017, lo stesso codice ha recuperato un valore di impostazione da un'impostazione del servizio app separata dichiarata tramite il portale di Azure. Ho modificato l'impostazione di Portale di Azure con un valore distinto per confermare e quindi ripubblicato nuovamente l'app Web da VS2017 per garantire che il valore di impostazione di Azure non fosse stato sovrascritto. – camelCase

0

Stesso qui dopo l'aggiornamento Azure SDK 2,2-2,3 .:

Fare clic con l'Azure progetto seleziona Proprietà. Nella scheda Applicazione fai clic su "Aggiorna ..." (grazie alla risposta di rattrick).

poi c'è stato un errore di più per risolvere: cercando di lanciare il progetto Azure nel Compute Emulatore ha generato un'eccezione: System.Configuration.ConfigurationErrorsException è stata gestita Messaggio: Eccezione non gestita di tipo 'System.Configuration.ConfigurationErrorsException 'si è verificato in Microsoft.WindowsAzure.ServiceRuntime.dll Ulteriori informazioni: konnte nicht erstellt werden.

nella finestra "Elenco errori" di VS2013 c'era il seguente avviso:

conflitti Trovato tra le diverse versioni dello stesso assembly dipendente. In Visual Studio, fai doppio clic su questo avviso (o selezionalo e premi Invio) per correggere i conflitti; in caso contrario, aggiungere i seguenti reindirizzamenti di binding al nodo "runtime" nel file di configurazione dell'applicazione: C: \ Programmi (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets 1635

Ho permesso a VS di risolvere questo avvertimento e tutto ha funzionato bene.

1

Ho avuto lo stesso problema (due volte). Anche dopo aver riavviato Visual Studio e dopo aver riavviato l'emulatore di Azure, CloudConfigurationManager.GetSetting ("SettingName") restituisce null.

Ero sicuro che ha funzionato prima e ho avuto l'ultimo SDK.

Quindi le soluzioni stavano riavviando il mio PC e successivamente CloudConfigurationManager.GetSetting ("SettingName") restituisce il valore corretto.

+0

Il riavvio lo ha risolto anche per me – rfcdejong

-1

Ho avuto lo stesso problema. Nessuno dei consigli ha funzionato per me, ma il "problema" era semplice. Un semplice deve capire come funziona questa classe.

Non va nel tuo app.config/web.config o in qualsiasi momento memorizzi le impostazioni dell'applicazione.CloudConfigurationManager funziona con ServiceConfiguration.*.cscfg e ServiceConfiguration.csdef. Il .csdef deve contenere una definizione dell'impostazione, ma non il suo valore nella sezione ConfigurationSettings. Le impostazioni stesse si trovano nei file .cscfg (nella stessa sezione ma includono il valore; suppongo che il motivo della doppia definizione sia quello di assicurarsi che sia la configurazione cloud sia quella locale abbiano le stesse impostazioni).

È possibile impostare questi facendo clic con il pulsante destro del mouse sul ruolo in Visual Studio e selezionando Proprietà -> Impostazioni (in caso di StorageConnectionString, selezionare semplicemente "L'abbonamento", se l'account di archiviazione è connesso al servizio cloud) o modificandoli manualmente. Se si incasinano le impostazioni, si otterrà un'icona punto esclamativo.

Semplice come quello.

1

Ho avuto lo stesso problema questo problema dopo aver rivisitato la mia soluzione Azure (ruolo Web + Worker) per aggiornarlo per Azure 2.5. Rivedere la guida per CloudConfigurationManager.GetSetting, se è in esecuzione su una piattaforma cloud (Azure), viene letta da ServiceConfiguration.csfg, se in esecuzione come app Web .net, dalla app o web.config.

Quindi la mia soluzione era semplicemente cambiare il progetto di avvio nel progetto cloud di Azure, non nel progetto Web.
Stavo diventando nullo perché era ospitato nella piattaforma sbagliata e stava leggendo dai file .config senza impostazioni. (Doh!)

4

Sulla base della mia comprensione, vorrei sottolineare che CloudConfigurationManager.GetSetting cercherà in web.config se si sta esaurendo un servizio cloud. Guarderà in cscfg se sei all'interno di un servizio cloud.

prega di fare riferimento questo link.

1

Si tratta di un vecchio thread, ma ho voluto condividere la mia soluzione, se problema non viene risolto con i metodi di cui sopra quindi assicurarsi che Azure emulatore è in esecuzione quando si esegue l'applicazione; almeno per me è successo. Per quanto mi riguarda ho dovuto creare una classe per gestire problema emulatore come detto qui ...

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

è stato sempre un valore nullo con quando si passa una stringa letterale e dopo l'installazione di Azure SDK 2.6 (funzionava prima).

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

Sostituita la stringa letterale e ha funzionato correttamente.

string connectionStr = "AzureStorage"; 

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

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionstring);