3

ソリューションにWindowsAzureCache 1.8.0 nugetパッケージを追加しましたが、プロジェクトをロードするとVisualStudioがクラッシュします。binフォルダーからdllを削除することでクラッシュを「防ぐ」ことができ、プロジェクトの読み込み中にVisualStudioがそれらを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月)を試みましたが、問題が再発します。

また、AppFabricServerがインストールされていません。

よろしくお願いします!

4

3 に答える 3

2

他の誰かがこの問題に遭遇した場合に備えて、私はここで私のために働いていると思われるものを提供しています。

Visual Studioにプロジェクトをロードさせるために、プロジェクトからDLLを削除しました。また、プロジェクトの読み込み中にそれらを削除し、VSがdllをbinフォルダーに戻しました。

dllへの参照を削除しました。次に、datacachefactoryを使用していたコードを削除しました。

結局、ビルドを実行したコードでのキャッシュの不適切な使用が原因であると思います。私はそれの使用法を修正し、ソリューションを構築し、すべてのdllをプロジェクトに戻すことができました。

以前は、datacacheオブジェクトは静的ではありませんでした。

データキャッシュファクトリの正しい使用法は次のとおりです。

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プロセス(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 に答える
0

VisualStudioだけに関連する問題ではありません。Webロールの実行中に取得します。この他の記事をチェックしてください。

于 2013-04-12T11:58:42.613 に答える