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

标签 c# .net azure azure-role-environment azure-service-runtime

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

有没有好的方法可以在非Azure生产服务器上不安装SDK的情况下检测环境?

我尝试过使用:

if (RoleEnvironment.IsAvailable)

来自 Microsoft.WindowsAzure.ServiceRuntime,它在本地和 Azure 中都能完美运行。但是,我需要将 Microsoft.WindowsAzure.ServiceRuntime.dll 设置为 CopyLocal,即使这样我也得到:

Could not load file or assembly 'msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies

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

也许有一种不依赖 Microsoft.WindowsAzure.ServiceRuntime 的检测方法?

最佳答案

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

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

我知道复制 DLL 不太好,但这是您防止错误所需的唯一一个,并且它与您正在使用的 SDK 版本相关,因此在更新 SDK 之前不会更改.

一个可行的替代方案是在 appSettings 中添加配置值并应用 config transform当您为 Azure 构建应用程序时。

关于c# - 检测 .NET 应用程序是在 Azure 还是非 Azure 环境中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656411/

相关文章:

c# - 正则表达式:匹配表达式周围最接近的开闭花括号内的所有内容

java - 官方Windows Azure SDK导致的Android捕获错误

azure - 如果我们向信任 Azure AD 授予读取本地 AD 的访问权限,那么当本地 AD 用户没有电子邮件地址时会发生什么情况?

c# - MessageBox、C#、Windows 窗体未使用的输入键

c# - 正则表达式模式不显示匹配项

java - 带有请求 header 的 Web 客户端

.net - Interlocked.Exchange,但不适用于 bool 值?

javascript - 宇宙数据库 : Unable to perform transaction on documents using stored procedures

C# - 解析包含逻辑运算符的复杂字符串

c# - 为什么抽象类的构造函数应该被保护,而不是公共(public)的?