MVCプロジェクト、2つのWCFプロジェクト、およびサービスレイヤー(ビジネスオブジェクト、リポジトリなど)を含むコードベースがあります。また、共通コードのアセンブリ(これを単にcommonと呼びます)があり、これには次のコードが含まれています。
a)コードベース間で共有され、b)他のプロジェクトで再利用されることを目的としたコード。
この共通コードの一部は、Common.Webと呼ばれる名前空間です。この名前空間には、現在のMVCアプリで使用され、将来のアプリ(監査ログなど)で使用することを意図して作成したMVC属性が含まれています。
とにかく、私のWCFサービスは、何ヶ月もの間、私の共通のアセンブリを喜んで参照してきました。彼らは明らかにSystem.Web.Mvc.dllを参照する必要のあるクラスを使用していません。なぜなら、それらのクラスでは何も参照していないため、.NETはSystem.Web.Mvcを読み込もうとしないからです。 .dll。
しかし、今日私は問題に遭遇しました。WCFサービスの1つから呼び出されるコードを共通アセンブリに追加しました。このコードは、EFコードファーストを介してデータベースに書き込みます。これは、次のような単純なクラス(およびDbContext)です。
using System.Data.Entity;
using System;
using System.ComponentModel.DataAnnotations;
namespace Rsts.Common.Clients.Transcend
{
public class TransactionAuditContext : DbContext
{
public TransactionAuditContext(string connString)
: base(connString)
{
}
/// <summary>
/// DbSet of AuditEventTypes
/// </summary>
public DbSet<TransactionDetails> Transactions { get; set; }
}
public class TransactionDetails
{
[Key()]
public Int64 TransactionID { get; set; }
public Int64 PageRequestID { get; set; }
public string TransactionRequestData { get; set; }
public string TransactionReturnData { get; set; }
}
}
このようなコードを実行するとすぐに:
context.Transactions.Add(new TransactionDetails());
ReflectionTypeLoadExceptionが発生しますが、その理由はSystem.Web.Mvc.dllが見つからないためです。Common dllでSystem.Web.Mvc.dllを参照していますが、このコードはSystem.Web.Mvc.dllのタイプを参照していないため、.NETがMVCをロードしようとする理由はありません。 。
ReflectionTypeLoadExceptionのTypesプロパティを見ると、使用しているかどうかに関係なく、.NETがCommonアセンブリ内のすべての型を読み込もうとしているようです。それで、.NETがアセンブリ内のすべてのタイプをロードする原因となる状況はありますか?アセンブリが何度も参照されるため、.NETがアセンブリ内のすべてのタイプをロードするだけのポイントはありますか?(これは私の共通アセンブリであるため、頻繁に参照されることを忘れないでください)。
どんな助けでもいただければ幸いです。