我们目前正在将应用程序的一些实例迁移到 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/