有一个项目从 .NET 3.5 迁移到 .NET 4.0。该项目有一些对 .NET 1.0 程序集的引用,这些程序集是 COM 对象的包装器。这些 .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
}
内部异常为空。我可以看到 0x80131522 (-2146233054) 的 HRESULT,这意味着 COR_E_TYPELOAD。我不认为我缺少任何本机 dll 或程序集,因为我们的 .NET 工作正常(并且它使用相同的代码、相同的引用)。
如何解决此异常?是否有一种简单的方法,例如在 dll 的配置文件中指定 requiredRuntime 或在 csproj 的参考部分中指定 requiredTargetFramework?