繁体   English   中英

检测.NET应用程序是在Azure中还是在非Azure环境中运行

[英]Detecting if a .NET app is running in Azure or on a non-Azure environment

我们目前正在将我们的应用程序的一些实例移动到Azure,但仍将保持与非Azure托管的现有实例的向后兼容性。

是否有一种很好的方法来检测环境而无需在非Azure生产服务器上安装SDK?

我尝试过使用:

if (RoleEnvironment.IsAvailable)

来自Microsoft.WindowsAzure.ServiceRuntime,它在本地和Azure中都可以很好地工作。 但是,我需要将Microsoft.WindowsAzure.ServiceRuntime.dll设置为CopyLocal,即使这样我也得到:

无法加载文件或程序集'msshrtmi,Version = 2.2.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一

似乎没有NuGet包,我不想手动复制msshrtmi dll。

也许有一种方法可以在不依赖Microsoft.WindowsAzure.ServiceRuntime的情况下进行检测?

不幸的是,解决此问题的最简单方法是从以下位置复制msshrtmi.dll文件:

C:\\Program Files\\Microsoft SDKs\\Windows Azure\\.NET SDK\\{version}\\bin\\runtimes\\base\\x64

我知道复制DLL并不是很好,但这是你需要防止错误的唯一一个,它与你正在使用的SDK版本相关联,因此在你更新SDK之前不会改变。

一个可行的替代方案是在appSettings添加配置值,并在为Azure构建应用程序时应用配置转换

您可以验证RoleRoot环境变量是否存在。 如果是,则您的应用程序在Web或辅助角色中运行。

您可以使用if(RoleEnvironment.IsEmulated)进行检查

您可以尝试在msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35程序集上msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 Assembly.Load,如果失败则不要尝试调用RoleEnvironment.IsAvailable方法(因为你知道你肯定是不在Azure上运行)。

或者,您可以尝试使用machinename,因为所有Azure实例都以“RD”开头

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM