0

私はwin2k8 r2 64ビットでアップデート1を使用してVS2012で作業しています。

単純なクラス ライブラリ アプリケーション内で、[追加] > [新しいアイテム] > [ADO.NET Entity Data Model] を実行します。

ネットワーク上の SQL Server を選択し、データベースを選択して 1 つのテーブルを追加します。テーブルが追加され、コード内でクラス名としてアクセスできます。

問題: バックエンド DB で何かを行うと、ライブラリを使用しているアプリがスタックオーバーフロー エラー (例外なし) でクラッシュします。たとえば、これはクラッシュします:var logs =_db_context.LOGs.ToList();

何か案は?

編集: 同じプロジェクトが同じマシン上の VS2010 で動作していました。これは、エンティティ フレームワークもアップグレードした VS2012 にアップグレードしたときにのみ発生し始めました。また、データベースにアクセスするコードを削除すると、アプリは正常に動作することにも言及する価値があります。また、.edmx を削除して再追加しても役に立ちません。また、VS をクリーンアップ/再ビルドしたり、再起動したりすることもできません。

EDIT2:デバッグ後、行LogServerEntities context = new LogServerEntities()に到達したときに気づき、「ローカル」からコンテキスト変数を展開しようとすると、VSはデバッグを終了して言ったManaged (v4.0.30319)' has exited with code -2146233082 (0x80131506).

4

1 に答える 1

0

クラス ライブラリは、実際にはカスタム トレース リスナーであり、次のようになっていました。コンストラクターで FirstChanceHandler にコメントを付けると、実際には例外がコンソール出力に表示されました。アセンブリ参照 (System.Management.Automation) の読み込みに失敗していました。私はそのアセンブリを本当に必要とせず、単純に削除しました.stackoverflowエラー(バグだと思います)は消えました。

    public Listener()
    {
        AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
    }

    public void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
    {
        WriteException(e.Exception);
    }

    public void WriteException(Exception e)
    {
        string app_identity = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
        string server_name = System.Environment.MachineName;

        using (LogServerEntities context = new LogServerEntities())
        {
            LOG log = new LOG();
            log.DATE = DateTime.Now;
            log.THREAD = Thread.CurrentThread.Name;
            log.MESSAGE = e.Message;
            log.LOGGER = string.Format("{0} {1}", app_identity, server_name);
            log.LEVEL = Level.Exception.ToString();
            log.EXCEPTION = e.GetType().FullName;

            var web_exception = e as WebException;
            if (web_exception != null)
            {
                if (web_exception.Status == WebExceptionStatus.ProtocolError)
                {
                    var response = web_exception.Response as HttpWebResponse;
                    if (response != null)
                        log.HTTP_RESPONSE_CODE = ((int)response.StatusCode).ToString();
                    else
                        log.HTTP_STATUS = web_exception.Status.ToString();
                }
                else
                {
                    log.HTTP_STATUS = web_exception.Status.ToString();
                }
            }

            context.LOGs.Add(log);
            context.SaveChanges();
        }
    }
于 2013-02-23T16:04:41.170 に答える