c# - Azure:用于提取适用于所有三种场景的设置的代码:azure 网站、角色和本地

标签 c# asp.net azure

我目前正在通过三种方式测试我的 ASP.NET 网站:

  • 本地调试
  • 部署为 azure 网站
  • 在 Azure 模拟器中进行测试(很快将使用角色进行部署)

我有一个 if/else 试图检测角色环境是否可用。它在本地运行良好,但在 Azure 网站环境中运行时会崩溃:

System.IO.FileLoadException: Could not load file or assembly 'Microsoft.WindowsAzure.ServiceRuntime, Version=2.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) File name: 'Microsoft.WindowsAzure.ServiceRuntime, Version=2.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

我的代码如下:

 if (String.IsNullOrEmpty(Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME")) && Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.IsAvailable)
{
//drop item on the queue for it to be picked up by the worker role
}
else
{
//Process here
}

我将其短路,以便 RoleEnvironment 代码在网站上永远不会运行。我附加了一个调试器来验证语句的第一部分是否返回 false。但是每当我第一次跳到包含该调用的方法时就会发生异常。

是否有人有任何建议可以让我的代码正常运行,无论它是在 Azure 网站还是本地以可用的角色运行?部署后我没有对网站进行任何自定义操作。

编辑:基于此线程: Could not load file or assembly 'Microsoft.WindowsAzure.ServiceRuntime, Version=1.8.0.0 when deployed to the cloud

The assemblies Microsoft.WindowsAzure.Diagnostics and Microsoft.WindowsAzure.ServiceRuntime cannot be used in a Web Site.

如果是这种情况,有什么方法可以帮助自动化此操作,以便我不必维护代码的两个单独版本?

编辑2:我正在考虑围绕这个进行条件编译。不是全自动的,但可能是最好的解决方案。

最佳答案

根据我的经验,如果您的代码/库需要了解它们是否在云服务或 Azure 网站中运行,最好使用配置设置,而不是尝试检查 RoleEnvironment 可用。我见过的所有解决方案要么都是不稳定的,要么需要部署额外的依赖项,这很麻烦。

读取配置的最佳方法是使用 CloudConfigurationManager.GetSetting() 方法。

它足够智能,可以从云服务配置文件中读取(如果存在),然后回退到 app.configweb.config

关于c# - Azure:用于提取适用于所有三种场景的设置的代码:azure 网站、角色和本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216175/

相关文章:

asp.net - 为什么不提供 c++ 作为 asp.net 的代码隐藏语言?

powershell - 如何使用 PowerShell 打开 Azure Active Directory OAuth 授权代码授予流程的授权对话框并接收响应

iis - 为什么大型 POST 请求无法到达我的 Azure Web 角色?

c# - 在 MonoDevelop 中学习 C# 有什么缺点吗?

c# - 在 WebBrowser 控件中修改 Javascript 变量

c# - 您如何向 C#/Java 开发人员解释 C++ 指针?

c# - 使用 MVC SimpleMembership 分配角色

c# - 如何解析不同类型服务的 IEnumerable

c# - 电话号码验证的正则表达式,以 0 或 + 号开头的号码

Azure Resource Graph Explorer::在时间图表中绘制趋势线