我们将来会使用Windows Azure网站来满足我们的基本托管需求。由于云与本地的配置设置非常具体,您如何管理这些设置?举例来说:
本地开发服务器:
string path = AppSettings["StoragePath"];
<add key="StoragePath" value="c:\temp" />
Windows Azure:
string path = AppSettings["StoragePath"];
<add key="StoragePath" value="xyz" />
您是否在每次发布之前手动更改配置文件中的StoragePath OR 代码中可以执行以下操作:
<add key="LocalStoragePath" value="c:\temp" />
<add key="BlobStoragePath" value="xyz" />
string path;
if (Azure)
{
path = AppSettings["BlobStoragePath"];
}
else
{
path = AppSettings["LocalStoragePath"];
}
如果可以使用更晚的版本,我如何确定环境是否为Windows Azure?
答案 0 :(得分:1)
我通常会创建一个新的构建配置(称为Azure)。
然后在web.config中创建你的密钥..
<add key="LocalStoragePath" value="c:\blah" />
<add key="AzureStoragePath" value="xyz" />
代码中的写:
#if CONFIG == "Azure"
public const String storageKey = "AzureStoragePath";
#endif CONFIG == "Debug"
public const String storageKey = "LocalStoragePath";
#endif
并使用它:
String path = AppSettings[storageKey];
答案 1 :(得分:1)
public interface IConfigurationProvider { }
public class AzureConfigurationProvider : IConfigurationProvider { }
public class LocalConfigurationProvider : IConfigurationProvider { }
public static class ConfigurationProviderFactory
{
private static bool _isAzure = Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.IsAvailable;
private static Lazy<IConfigurationProvider> _provider = Lazy<IConfigurationProvider>(GetProvider);
private static IConfigurationProvider GetProvider()
{
return _isAzure ?
new AzureConfigurationProvider() :
new LocalConfigurationProvider();
}
public static IConfigurationProvider Instance
{
get { return _provider.Value; }
}
}
答案 2 :(得分:1)
假设您正在使用VS 2010或VS2012中的latest version Web发布功能,您可以使用发布配置文件和web.config转换轻松完成此任务。
首先,创建发布配置文件(右键单击项目,选择“发布”,然后选择对话框)。这将是进行各种配置更改的默认位置,例如连接字符串。
然后,右键单击为发布配置文件创建的.pubxml文件,应该有一个添加转换的选项。这将添加一个新的web..config,它应该出现在web.Debug.config / web.Release.config旁边。
在该文件中,您可以为要更改的应用设置添加转换。使用该配置文件发布时,将应用转换值;本地开发仍将使用您想要的任何值。