3

我已将 Windows Azure Cache 1.8.0 nuget 包添加到我的解决方案中,但在我加载项目时它最终导致 Visual Studio 崩溃。我发现我可以通过从 bin 文件夹中删除 dll 来“防止”崩溃,然后在项目加载时 Visual Studio 将它们添加回 bin 时再次这样做。

我要删除的 dll 是:

Microsoft.ApplicationServer.Caching.AzureClientHelper.dll
Microsoft.ApplicationServer.Caching.AzureCommon.dll
Microsoft.ApplicationServer.Caching.Client.dll
Microsoft.ApplicationServer.Caching.Core.dll

当我查看 Visual Studio 崩溃的事件查看器时,我得到以下信息:

Application: devenv.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentNullException
    Stack:
    at System.Threading.Monitor.Enter(System.Object)
    at Microsoft.ApplicationServer.Caching.DataCacheFactory.Close()
    at Microsoft.ApplicationServer.Caching.DataCacheFactory.Finalize()

我不确定为什么 VS 在项目加载时使用 dll 做事,但我承认我不是这方面的专家。

我基本上按照此页面上描述的过程为缓存添加了一个专用的缓存工作者角色:http: //www.windowsazure.com/en-us/develop/net/how-to-guides/cache/

我尝试删除并重新安装软件包,删除并重新安装 Visual Studio SDK(2012 年 10 月),但问题又回来了。

另外,我没有安装 App Fabric Server。

在此先感谢您的帮助!

4

3 回答 3

2

万一其他人遇到这个问题,我在这里提供似乎对我有用的东西。

为了让 Visual Studio 加载项目,我从项目中删除了 DLL。我还在项目加载时删除了它们,VS 将 dll 放回 bin 文件夹中。

我删除了对 dll 的引用。然后我删除了使用 datacachefactory 的代码。

最后,我认为这是由于在我执行构建的代码中不当使用缓存造成的。我能够更正它的用法,构建解决方案并将所有 dll 重新放入项目中。

以前通过数据缓存对象已经不是静态的。

这是我对数据缓存工厂的正确用法:

using System;
using Microsoft.ApplicationServer.Caching;


namespace WebRole1.Classes
{
    public class AzureCache
    {
        public static DataCache cache { get; set; }
        public static DataCacheFactory dataCacheFactory { get; set; }

    public AzureCache()
    {
        if (cache == null){
            DataCacheFactoryConfiguration cfg = new DataCacheFactoryConfiguration();
            cfg.AutoDiscoverProperty = new DataCacheAutoDiscoverProperty(true, "CacheWorkerRole1"); 
            dataCacheFactory = new DataCacheFactory(cfg);
            cache = dataCacheFactory.GetDefaultCache();
        }
    }

    public void Add(string item, object value)
    {                                                                              
       cache.Add(item, value);
    }
    public void Add(string item, object value, TimeSpan timeout)
    {
       cache.Put(item, value, timeout);
    }
    public object Get(string item)
    {   
        return cache.Get(item);
    }

    public TimeSpan TimeRemaining (string item)
    {
        DataCacheItem DCitem = cache.GetCacheItem(item);
        return DCitem.Timeout;
    }

    public void Flush()
    {
        cache.Clear();
        DataCacheFactory cacheFactory = new DataCacheFactory();
        cache = cacheFactory.GetDefaultCache();

    }

    }
}
于 2013-02-01T17:47:39.013 回答
0

这不是与 Visual Studio 完全相关的问题。我在运行我的 webrole 时得到它。查看另一篇文章

于 2013-04-12T11:58:42.613 回答
0

我们可能需要捕获 Visual Studio 进程 (devenv.exe) 的转储,以查看导致此异常的原因。您可以使用 debugdiag(" http://www.microsoft.com/en-us/download/details.aspx?id=26798 ") 来捕获转储。您可能需要让 Microsoft 支持服务(“ http://www.windowsazure.com/en-us/support/contact/ ”)进一步调查此问题,因为异常来自缓存代码本身。

于 2013-01-30T21:47:17.563 回答