我有一些在Winforms应用程序,Windows服务和现在Azure工作者角色中使用的共享程序集/项目.
如果我在Azure角色中运行,是否有任何方法可以在运行时检测到.
我已经找到了如何检测是否运行Azure模拟器:
Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.IsEmulated
Run Code Online (Sandbox Code Playgroud)
但这不符合我的要求.我也不想在共享程序集中添加对任何Azure程序集的引用.
理想情况下,我想要一些类似于我用来检测是否作为控制台与服务运行的东西:
System.Environment.UserInteractive
Run Code Online (Sandbox Code Playgroud)
有什么能给我这个逻辑吗?
对于任何感兴趣的人,我想我会分享我是如何实施的,感谢@Sandrino Di Mattia 的回答:
您可以检查 RoleRoot 环境变量是否存在(至少对于云服务):
请注意,这不适合 Winforms 应用程序,因为我实际上只在最后需要它用于服务 - 即在服务运行之间进行检测
这是一个大纲:
public static class ServiceRunner
{
private static bool IsAzureWorker
{
get { return !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("RoleRoot")); }
}
public static void Run(string[] args)
{
if (IsAzureWorker)
{
//Running as Azure Worker
}
else if (Environment.UserInteractive) //note, this is true for Azure emulator too
{
//Running as Console App
}
else
{
//Running as Windows Service
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以检查 RoleRoot 环境变量是否存在(至少对于云服务):
或者,为什么不简单地向您的配置添加一个设置(AppSettings 或服务配置):
<appSettings>
...
<add key="AppEnvironment" value="Azure.CloudService|Azure.Website" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
然后,您可以简单地检查该设置是否存在且具有特定值,以了解您正在运行的位置。这也意味着在(自动)构建或部署过程中,您需要包含此设置(例如,可以使用 XDT)。
| 归档时间: |
|
| 查看次数: |
3241 次 |
| 最近记录: |