2013-03-13 118 views
18

以下說明here我:CloudConfigurationManager.GetSetting返回null

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

connectionStringnull,這裏是我的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> 

回答

10

好這個工程,即使意見不適合,因爲我有一個裁判CloudConfigManager:

如果要創建無參考Microsoft.WindowsAzure.CloudConfigurationManager的應用程序,並且您的連接字符串位於web.config或app.config中,如上所示,則可以使用ConfigurationManager檢索連接字符串。您將需要一個參考System.Configuration.dll添加到您的項目,並添加另一個空間聲明中它:

using System.Configuration; 

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

我不明白爲什麼這個答案被標記爲正確的。這個問題發佈了引用CloudConfigurationManager,但是這個解決方案使用了ConfigurationManager。它們不是同一件事。在我看來,Nikolai Joukov對問題提出了正確的答案。 – Nathan 2015-10-07 17:25:29

+0

@Nathan雖然尼古拉的答案可能解釋什麼是錯的,但它缺少任何解決方案。 – weston 2017-06-05 14:04:14

4

確保您的所有引用都同步。有2012-06庫和2012-10將它們設置爲Copy Local = true並驗證SDK版本。我處理完全相同的事情,讓我瘋狂。

+1

您是否通過NuGet安裝?我做了,我有Microsoft.WindowsAzure.Storage v2.0.0.0(.net 4.0)和Microsoft.WindowsAzure.Configuration v1.8.0.0(.net 3.5)這聽起來錯了嗎? – weston 2013-03-14 09:42:26

+2

我升級到Windows Azure SDK for .NET 2.0。自動升級蔚藍項目後,它也沒有找到配置字符串。將所有對Microsoft.WindowsAzure.Configuration的引用手動更新到版本2.0.0.0(它們是1.8.0.0)後,它就可以工作了。 – huha 2013-05-08 13:40:41

+0

@weston對於遲到的回覆感到抱歉......是OOtown ......你是否已經解決了這個問題? – SocialMitch 2013-05-24 19:39:39

9

我有同樣的問題。我已經更新了項目以使用Azure SDK 2.0。我爲我的網絡和工作者角色更新了NuGet包,但Visual Studio中的Azure項目仍舊在舊版本中。

要解決此問題,請右鍵單擊Azure項目並選擇「屬性」。在「應用程序」選項卡下,您會看到一個按鈕來更新您的Azure SDK。

+1

這是正確答案! – BritishDeveloper 2013-06-14 12:44:04

+0

要下載並安裝sdk(易於使用網絡平臺安裝程序) – Jason 2013-08-11 05:12:40

-1

這個工作對我來說...

using System.Configuration; 

...

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

之前,無法使用升級按鈕,謝謝您的同意。 – weston 2013-11-04 10:08:21

4

這發生在我身上時,我升級在Azure SDK 2.2版本。

要修復它,我更改了packages.config以使用更新版本的Azure ConfigurationManager。

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

我有相當類似的問題。我從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加載程序集並調用funktions(通過反射)的方式。

3

按照本教程:

你可以配置設置是這樣的:

RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString") 
+0

這爲我修好了。也許'CloudConfigurationManager.GetSetting'調用不再在Azure v2.5中查看雲配置。 – 2015-03-25 15:02:22

1

我Azure的SDK升級,從2.0到2.2後得到了這個。我可以通過以下方式修復:

  1. 右鍵單擊Azure項目並選擇「屬性」。根據應用程序選項卡更新Azure SDK。 (感謝rattrick的回答)。
  2. 右鍵單擊管理NuGet包。在左側單擊更新並更新WindowsAzure.ConfigurationManager。
15

有同樣的問題。而不是使用一個連接字符串中,使用這樣的配置 - > appSettings->添加關鍵...

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

這不是答案 – Sushant 2015-01-22 02:58:24

+2

這是我的答案。我在Azure項目設置中有連接字符串,它突然停止工作,沒有任何我能想到的解釋(沒有更新SDK或nuget包等)。將appSetting添加到Web.config也適用於我。感謝您的幫助 – 2015-08-01 22:50:14

+0

很高興確認此建議在2017年7月仍然有效。使用VS2017(預覽版15.3)和新創建的空白Azure Cloud/ASP.NET WebApp .Net 4.6 CloudConfigurationManager.GetSetting(..)方法獲取了本地運行時的Web.config文件設置。在VS2017中發佈到Azure之後,相同的代碼從通過Azure門戶聲明的單獨App Service設置中獲取設置值。我使用不同的值更改了Azure門戶設置,以確認並再次從VS2017重新發布Web應用程序,以確保Azure設置值不被覆蓋。 – camelCase 2017-07-12 22:08:41

0

同樣在這裏升級Azure的SDK從2.2到2.3之後:

右鍵單擊天青項目選擇屬性。在應用程序標籤中點擊「升級...」(感謝rattrick的回答)。

然後有一個更多的錯誤來解決: 試圖運行Azure項目在計算仿真拋出異常: System.Configuration.ConfigurationErrorsException是未處理 消息:類型的未處理的異常「System.Configuration.ConfigurationErrorsException '發生在Microsoft.WindowsAzure.ServiceRuntime.dll 其他信息:konnte nicht erstellt werden。

在VS2013的「錯誤列表」窗口有以下警告:

不同版本的相同依賴性組件的實測值之間的衝突。在Visual Studio中,雙擊此警告(或選擇它並按Enter鍵)以解決衝突;否則,將以下綁定重定向添加到應用程序配置文件中的「運行時」節點:C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets 1635

我讓VS解析這個警告和一切工作正常。

1

我有同樣的問題(兩次)。 即使重新啓動Visual Studio並重新啓動Azure模擬器後,CloudConfigurationManager.GetSetting(「SettingName」)也會返回null。

我確信它已經工作過,並且擁有最新的SDK。

因此,解決方案重新啓動我的電腦,然後CloudConfigurationManager.GetSetting(「設置名稱」)返回正確的值。

+0

重新啓動也爲我修好了 – rfcdejong 2014-04-09 09:27:59

-1

我有同樣的問題。沒有任何建議爲我工作,但「問題」很簡單。一個簡單的必須瞭解這個類是如何工作的。

它不會進入您的app.config/web.config或您存儲應用程序設置的任何位置。CloudConfigurationManagerServiceConfiguration.*.cscfgServiceConfiguration.csdef一起使用。 .csdef必須包含該設置的定義,但不包含ConfigurationSettings部分中的值。這些設置本身位於.cscfg文件中(在相同的部分,但包括值;我想雙重定義的原因是爲了確保雲和本地配置都具有相同的設置)。

您可以通過右鍵單擊Visual Studio中的角色並選擇屬性 - >設置(如果存儲連接字符串,只需選擇「您的訂閱」,如果您的存儲帳戶連接到雲服務),或者通過手動編輯它們。如果你搞砸了設置,你會得到一個感嘆號圖標。

那樣簡單。

1

在重新訪問我的Azure解決方案(Web +工作者角色)以更新它爲Azure 2.5後,我得到了同樣的問題。查看CloudConfigurationManager.GetSetting的幫助,如果它運行在雲平臺(Azure)下,則從ServiceConfiguration.csfg中讀取,如果作爲.net Web應用運行,則從應用讀取或從web.config讀取。

所以我的修復是簡單地將啓動項目更改回Azure雲項目,而不是Web項目。
我變得空了,因爲它被託管在錯誤的平臺上,並且沒有設置地從.config文件讀取。 (Doh!)

4

根據我的理解,我想指出CloudConfigurationManager.GetSetting會調查web​​.config,如果您用完雲服務。如果您位於雲服務內部,它將查看cscfg。

請參閱本 link.

1

這是一個古老的線程,但我想分享我的解決方案,如果問題不是由上述方法解決,那麼要確保,當你運行應用程序Azure存儲模擬器運行;至少對我來說這件事發生了。對我來說,我不得不創建一個類來處理模擬器問題,因爲這裏所說的......

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

漸漸天青安裝合格後一個字符串時,以及與空值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);