.NET 3.5 から .NET 4.0 に移行されたプロジェクトがあります。このプロジェクトには、COM オブジェクトのラッパーである .NET 1.0 アセンブリへの参照がいくつか含まれています。これらの .NET 1.0 アセンブリと COM オブジェクトは、外部企業の製品です。プロジェクトはコンパイルされますが、実行時にソフトウェアがこれらの 1.0 アセンブリで定義されたオブジェクトを参照する最初のポイントで例外がスローされます。
System.TypeLoadException: Could not load the structure 'ESRI.MapObjects2.Core.ShapeTypeConstants' from assembly 'ESRI.MapObjects2.Core, Version=2.4.1.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86'.
構造体は、型の同等性に適格であるとマークされていますが、静的または非パブリック フィールドがあります。実際の「構造」は列挙型で、Reflector では次のようになります。
[Guid("B027CAB1-6908-11D2-AF98-006097DA3688")]
public enum ShapeTypeConstants
{
moShapeTypeEllipse = 0x1a,
moShapeTypeLine = 0x16,
moShapeTypeMultipoint = 0x18,
moShapeTypePoint = 0x15,
moShapeTypePolygon = 0x17,
moShapeTypeRectangle = 0x19
}
内部例外は null です。0x80131522 (-2146233054) の HRESULT が表示されます。これは COR_E_TYPELOAD を意味します。私たちの .NET は正常に動作する (同じコード、同じ参照を使用する) ため、ネイティブ dll またはアセンブリが欠落しているとは思いません。
この例外を修正するにはどうすればよいですか? dllの構成ファイルでrequiredRuntimeを指定するか、csprojの参照セクションでrequiredTargetFrameworkを指定するような簡単な方法はありますか?