按照说明here我:
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>
答案 0 :(得分:19)
CloudConfigurationManager只能读取appSettings标记内的配置设置。如果您的配置设置在不同的标记内,则调用GetSetting将返回Null。
答案 1 :(得分:18)
有同样的问题。而不是使用连接字符串,使用配置 - &gt; appSettings-&gt;这样添加键...
<configuration>
<appSettings>
<add key="StorageConnectionString" value="[ConnectionStringHere]" />
</appSettings>
</configuration>
答案 2 :(得分:10)
这很有效,即使评论不适合,因为我确实有一个参考CloudConfigManager:
如果您创建的应用程序没有引用Microsoft.WindowsAzure.CloudConfigurationManager,并且您的连接字符串位于web.config或app.config中,如上所示,则可以使用ConfigurationManager检索连接字符串。您需要向项目添加对System.Configuration.dll的引用,并为其添加另一个名称空间声明:
using System.Configuration;
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);
答案 3 :(得分:9)
我遇到了同样的问题。我已将项目更新为使用Azure SDK 2.0。我为我的Web和辅助角色更新了NuGet包,但Visual Studio中的Azure项目仍然是旧版本。
要解决此问题,请右键单击Azure项目,然后选择“属性”。在“应用程序”选项卡下,您将看到一个用于更新Azure SDK的按钮。
答案 4 :(得分:4)
当我将Azure SDK升级到2.2版时,发生了这种情况。
要修复它,我更改了packages.config以使用更新版本的Azure ConfigurationManager。
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.1.0" targetFramework="net45" />
答案 5 :(得分:4)
根据我的理解,我想指出,如果你的云服务用完了,CloudConfigurationManager.GetSetting会查看web.config。如果您在云服务中,它将查看cscfg。
请参考这个 link.
答案 6 :(得分:4)
确保所有参考文献都是同步的。有2012-06库和2012-10将它们设置为Copy Local = true并验证SDK版本。我处理完全相同的事情,让我疯了。
答案 7 :(得分:3)
遵循本教程:
您可以获得如下配置设置:
RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString")
答案 8 :(得分:1)
我将Azure SDK从2.0升级到2.2后得到了这个。我能够解决:
答案 9 :(得分: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");
}
}
答案 10 :(得分:1)
在重新访问我的Azure解决方案(Web + Worker角色)以更新Azure 2.5
后,我遇到了同样的问题。查看CloudConfigurationManager.GetSetting
的帮助,如果它在云平台(Azure)下运行,则从ServiceConfiguration.csfg
读取,如果作为.net
网络应用运行,则从应用或{{1}读取}。
所以我的修复只是将启动项目更改回Azure云项目,而不是Web项目
我得到了null,因为它是在错误的平台上托管并从web.config
文件中读取而没有设置。
(DOH!)
答案 11 :(得分:1)
我有同样的问题(两次)。 即使重新启动Visual Studio并重新启动Azure模拟器后,CloudConfigurationManager.GetSetting(&#34; SettingName&#34;)也会返回null。
我确信它之前有效,我有最新的SDK。
所以解决方案是重新启动我的PC,之后CloudConfigurationManager.GetSetting(&#34; SettingName&#34;)返回正确的值。
答案 12 :(得分:0)
将Azure SDK从2.2升级到2.3后也是如此。
右键单击Azure项目,选择“属性”。在“应用程序”选项卡中,单击&#34;升级...&#34; (感谢rattrick的回答)。
然后还有一个错误需要解决: 尝试在Compute Emulator中运行Azure项目引发了异常: System.Configuration.ConfigurationErrorsException未处理 消息:未处理的类型&#39; System.Configuration.ConfigurationErrorsException&#39;发生在Microsoft.WindowsAzure.ServiceRuntime.dll中 其他信息:konnte nicht erstellt werden。
在&#34;错误列表&#34; VS2013的窗口有以下警告:
发现同一依赖程序集的不同版本之间存在冲突。在Visual Studio中,双击此警告(或选择它并按Enter键)以修复冲突;否则,将以下绑定重定向添加到&#34;运行时&#34;应用程序配置文件中的节点:C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets 1635
我让VS解决此警告,一切正常。
答案 13 :(得分:0)
我遇到了类似的问题。我从Azure SDK 2.0更新到2.2 - 在此过程中,我使用NuGet Manager将Microsoft.WindowsAzure.Storage更新为最新版本。 PackageManager自动将Microsoft.WindowsAzure.Configuration置于1.8.0.0。我无法运行(这是.Net 2.0!?)。手动将所有引用设置为
后我认为这是因为CloudConfigurationManager.GetSetting加载程序集并调用funktions(通过反射)的方式。
答案 14 :(得分:-1)
我遇到了同样的问题。没有任何建议对我有用,但“问题”很简单。一个简单的方法就是要了解这个类的工作原理
它不会进入您的app.config
/ web.config
或存储应用程序设置的任何位置。 CloudConfigurationManager
适用于ServiceConfiguration.*.cscfg
和ServiceConfiguration.csdef
。 .csdef必须包含设置的定义,但不能包含ConfigurationSettings
部分下的值。设置本身位于.cscfg文件中(在同一部分下但包含值;我认为双重定义的原因是确保云和本地配置具有相同的设置)。
您可以通过在Visual Studio中右键单击您的角色并选择“属性” - >“gt;来设置它们。设置(如果是StorageConnectionString,只需选择“您的订阅”,如果您的存储帐户已连接到云服务),或通过手动编辑它们。如果你弄乱了设置,你会得到一个感叹号图标。
这很简单。
答案 15 :(得分:-1)
这对我有用......
using System.Configuration;
...
var connectionString = ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;
答案 16 :(得分:-2)
在安装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);