' microsoft . windowsazure . servicertime . roleenvironm
本文关键字:servicertime roleenvironm windowsazure microsoft | 更新日期: 2023-09-27 18:13:52
我正在尝试使用Windows Azure缓存在MVC4应用程序中存储会话。我从链接下面的步骤建立一个应用程序,但当我试图使DataCache的对象使用下面的代码行。
DataCache cache = new DataCache("default");
错误发生:
microsoft . windowsazure . servicertime .dll未找到或版本不匹配,我更新了我的Windows Azure模拟器版本2.0.0和安装WindowsAzure。缓存包版本2.0.0.0使用NuGet包安装程序。现在错误变为"the type initializer for。"Microsoft.WindowsAzure.ServiceRuntime。RoleEnvironment"抛出了一个例外。"
我使用Windows 8 with VS2012 and Windows Azure Emulator version 2.0.0.
如果有人能帮助我,我会很感激的。
InnerException
Message: The type initializer for 'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment' threw an exception.
Source: Microsoft.WindowsAzure.ServiceRuntime
Stack Trace: at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.get_IsAvailable()
at Microsoft.ApplicationServer.Caching.AzureClientHelper.RoleUtility.IsAzureEnvironmentAvailable()
Stack Trace: at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration.Initialize(String clientName)
at Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration..ctor()
at Microsoft.ApplicationServer.Caching.DataCacheFactory..ctor()
at Microsoft.ApplicationServer.Caching.DataCacheFactory.InitializeOrFetchSingletonFactoryInstance(String clientConfigurationName)
at Microsoft.ApplicationServer.Caching.DataCache..ctor(String cacheName, String clientConfigurationName)
at Microsoft.ApplicationServer.Caching.DataCache..ctor(String cacheName)
at MvcWebRole.Controllers.HomeController.Index() in d:'Pankaj'Azure.Test'Caching.Sample'MvcWebRole'Controllers'HomeController.cs:line 15
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
我在将从Azure SDK 2.3迁移到SDK 2.4时遇到过这种情况。
我注意到迁移自动修复了我的web和worker角色对服务运行时的所有引用,即
C:'Program Files'Microsoft SDKs'Windows Azure'.NET SDK'v2.3'ref'Microsoft.WindowsAzure.ServiceRuntime.dll
更改为:
C:'Program Files'Microsoft SDKs'Azure'.NET SDK'v2.4'ref'Microsoft.WindowsAzure.ServiceRuntime.dll
然而,任何从web/worker角色引用的程序集都没有更新,所以我不得不手动更新。
此外,我必须更新网页。Config和app.config项引用2.4.0.0
<dependentAssembly>
<assemblyIdentity name="Microsoft.WindowsAzure.ServiceRuntime" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.4.0.0" newVersion="2.4.0.0" />
</dependentAssembly>
我也有同样的问题。解决方案是将每个项目中所有引用的Azure程序集指向相同的源(对我来说是SDK文件夹中的dll)。NuGetManager将这些dll复制到packages
下的主项目路径中,并指向这些dll的引用。
我已经解决了一个类似的问题,将此添加到App.config:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
这是因为,我相信,servicertime .dll(或它的一个依赖项)是一个"混合模式"程序集。更多关于这意味着什么的信息,以及上面的配置行,可以在这里找到:useLegacyV2RuntimeActivationPolicy'在。net 4配置中做了什么?