2

将来,我们将使用 Windows Azure 网站来满足我们的基本托管需求。由于云与本地有非常具体的配置设置,您如何管理这些设置?举个例子:

本地开发服务器:

string path = AppSettings["StoragePath"];

<add key="StoragePath" value="c:\temp" />

视窗天青:

string path = AppSettings["StoragePath"];

<add key="StoragePath" value="xyz" />

您是否在每次发布之前手动更改配置文件中的 StoragePath,或者代码中是否有可以执行的操作,例如:

<add key="LocalStoragePath" value="c:\temp" />
<add key="BlobStoragePath" value="xyz" />    

string path;
if (Azure)
{
   path = AppSettings["BlobStoragePath"];
}
else
{
   path = AppSettings["LocalStoragePath"];
}

如果后者是可能的,我如何确定环境是否是 Windows Azure?

4

3 回答 3

1

假设您在 VS 2010 或 VS2012 中使用最新版本的 Web 发布功能,您可以使用发布配置文件和 web.config 转换相当轻松地完成此操作。

首先,创建您的发布配置文件(右键单击项目,选择发布,通过对话框)。无论如何,这将是进行各种配置更改的默认位置,例如连接字符串。

然后,右键单击为您的发布配置文件创建的 .pubxml 文件,应该有一个添加转换的选项。这将添加一个新的 web..config,它应该出现在 web.Debug.config/web.Release.config 旁边。

在该文件中,您可以为要更改的应用程序设置添加转换。当您使用该配置文件发布时,将应用转换值;本地开发仍将使用您想要的任何值。

于 2013-01-28T05:37:14.837 回答
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; }
    }
}
于 2013-01-28T05:22:02.327 回答
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];
于 2013-01-28T04:05:00.280 回答