我目前正在通过三种方式测试我的 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 网站还是本地以可用的角色运行?部署后我没有对网站进行任何自定义操作。
The assemblies Microsoft.WindowsAzure.Diagnostics and Microsoft.WindowsAzure.ServiceRuntime cannot be used in a Web Site.
如果是这种情况,有什么方法可以帮助自动化此操作,以便我不必维护代码的两个单独版本?
编辑2:我正在考虑围绕这个进行条件编译。不是全自动的,但可能是最好的解决方案。
最佳答案
根据我的经验,如果您的代码/库需要了解它们是否在云服务或 Azure 网站中运行,最好使用配置设置,而不是尝试检查 RoleEnvironment
可用。我见过的所有解决方案要么都是不稳定的,要么需要部署额外的依赖项,这很麻烦。
读取配置的最佳方法是使用 CloudConfigurationManager.GetSetting()
方法。
它足够智能,可以从云服务配置文件中读取(如果存在),然后回退到 app.config
或 web.config
。
关于c# - Azure:用于提取适用于所有三种场景的设置的代码:azure 网站、角色和本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216175/