【发布时间】:2017-01-19 05:17:22
【问题描述】:
使用 MVC3 并且我想确定我是在本地运行还是部署到云端?
【问题讨论】:
标签: azure azure-compute-emulator
使用 MVC3 并且我想确定我是在本地运行还是部署到云端?
【问题讨论】:
标签: azure azure-compute-emulator
RoleEnvironment.IsAvailable 会告诉您是否在 Windows Azure 中运行,但它不会区分真正的 Windows Azure 和本地开发模拟器。
我写了一个blog post,它显示了一个技巧,可以确定您是在真实的还是模拟的 Windows Azure 中运行,而 RoleEnvironment.IsAvailable == true - 希望能提供您正在寻找的东西。
编辑:如果您想要我在上述帖子中描述的 down-n-dirty 代码,而无需解释该技术为何有效:
private bool IsRunningInDevFabric()
{
// easiest check: try translate deployment ID into guid
Guid guidId;
if (Guid.TryParse(RoleEnvironment.DeploymentId, out guidId))
return false; // valid guid? We're in Azure Fabric
return true; // can't parse into guid? We're in Dev Fabric
}
编辑 2:我的回答有点过时了。现在有 RoleEnvironment.IsEmulated,使用起来更加简单。 MSDN 文档是here
【讨论】:
IsAvailable仍然应该被检查,因为IsEmulated会在前者为假时抛出(角色环境未初始化)。
这是我用的
public static class Azure
{
private static bool m_IsRunningAzure = GetIsRunningInAzure();
private static bool GetIsRunningInAzure()
{
Guid guidId;
if (RoleEnvironment.IsAvailable && Guid.TryParse(RoleEnvironment.DeploymentId, out guidId))
return true;
return false;
}
public static bool IsRunningInAzure()
{
return m_IsRunningAzure;
}
private static bool m_IsRunningAzureOrDevFabric = GetIsRunningInAzureOrDevFabric();
private static bool GetIsRunningInAzureOrDevFabric()
{
return RoleEnvironment.IsAvailable;
}
public static bool IsRunningInAzureOrDevFabric()
{
return m_IsRunningAzureOrDevFabric;
}
}
【讨论】:
您可以通过查找环境变量的存在来以老式方式进行。
在计算机属性中设置环境变量的值并使用 Environment.GetEnvironmentVariable("MyVariable") 读取它。
在 Azure 上,该变量不存在,因此调用将返回 null。
【讨论】:
看着它们,我想我会想看看 AZURE_DRIVE_DEV_PATH 环境变量 - 但不能保证这将在未来的 SDK 版本中起作用。
【讨论】: