11

我们目前正在将我们应用程序的一些实例移至 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 的情况下进行检测?

4

4 回答 4

5

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

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

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

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

于 2013-12-18T11:12:17.770 回答
2

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

于 2013-12-18T12:47:25.227 回答
2

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

于 2013-12-18T12:36:55.737 回答
0

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

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

于 2013-12-18T12:15:08.467 回答