「共通言語ランタイムが無効なプログラムを検出しました」というエラーをどのようにデバッグ/修正しますか?とにかくそれはどういう意味ですか?C#Entity Framework 4共通言語ランタイムが無効なプログラムエラーを検出しましたか?
同じIIS 7.5 Webサーバー(x64)に存在する2つのWebサイトに展開できるC#MVC 2 Webアプリケーションがあります。 1つはライブサイト(リリース構成を使用して展開)、2番目はベータサイト(このプロジェクト用に作成された新しいベータ設定を使用して展開)です。
2つのウェブサイトは、以下のとおりです。
ベータサイトでDefault Website/my_app
Beta/my_app
発注書のページングリストを選択し、それは例外「不正なプログラムを検出した」スローされます。実際のサイトで実行されているときとまったく同じコードが完全に機能します。それはなぜこれをするのだろうか?
編集:私は、サーバー上のVisual Studioをインストールして、問題とスタックトレースを引き起こした実際の行が見つかりました:
var list = ObjectContext.ObjectSet.AsQueryable();
int totalRecords = list.Count();
var paged = list.Skip((page > 0 ? page - 1 : 0) * rows).Take(rows);
を、これはスタックトレースと例外メッセージです:
{System.InvalidProgramException: Common Language Runtime detected an invalid program.
at System.Data.Entity.DynamicProxies.PurchaseOrderListVie_96479BFE9FA60F4C53137C56C1A1B2A11D90FF5AFFDC20383CC68E0A750792E3.set_Total(Decimal)
at lambda_method(Closure , Shaper)
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper)
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at MyApp.Controllers.PurchaseOrderController.GetPurchaseOrderList(Int32 page, Int32 rows, String sidx, String sord) in C:\src\MyApp.2010\MyApp.UI\Controllers\PurchaseOrder\List.cs:line 11}
この新しい情報は、どこに問題があるのかを正確に示していますが、問題の内容は示していません。 Entityフレームワークをよく知っている人であれば、このことを明らかにすることができます。
System.Data.Entity.DynamicProxies.PurchaseOrderListVie_96479B_etc.set_Total(Decimal)
エラーが発生する行はありますか?今私は、SQLの管理スタジオでクエリを実行し、結果はnullではなかった、合計もnullではありませんでした。なぜset_Total()を呼び出すのに問題があったのですか?
[Decimal] [Required] [DisplayName("Total")]
public virtual decimal Total
{
get;set;
}
ライブとベータサイトの主な違いは、ビルド構成です:
この
はPOCOは(T4テンプレートによって生成された)合計フィールドを定義する方法です。しかし、両方の設定では、すべての単一プロジェクトが「任意のCPU」に設定されています。私たちの開発マシンとサーバーはすべて64ビットです。これを引き起こしているWebサイトのIIS構成にはいくつかの違いがありますか?
私はPEVerifyを実行しようとしましたが、 "すべてのクラスとメソッドの検証済み"と表示されています。この種の問題にPEVerifyがどのように役立つのですか?
私はタイトルに「Common Language Runtimeが無効なプログラムの問題を検出しました」という15の質問があることがわかります。私の質問は重複しておらず、似たようなタイトルを持つ他の質問とは異なるいくつかのユニークな機能を持っています(これらの15のうちの1つだけがEntity Frameworkについてです - 残りはReflectionまたはTFSに関するものです)
Visual Studio 2010では、さまざまなリリースモードで異なるweb.configファイルがサポートされています。ベータ版とプロダクション設定ファイルが機能的に同一であることを確認しましたか? –
はい、唯一の違いはデータベース接続文字列です。リリースとベータ版の両方で同じ基本web.configを使用してから、web deployを実行して正しい接続文字列を追加します。 –
これを解決しようとするために+100の賞金が追加されました –