【问题标题】:System.TypeLoadException: Could not load type 'System.Func`2'System.TypeLoadException:无法加载类型“System.Func`2”
【发布时间】:2014-07-22 19:59:57
【问题描述】:

我的代码中出现 System.TypeLoadException,描述如下:

Could not load type 'System.Func`2' from assembly 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

这基本上是我在错误附近所做的事情,没有 try-catch 和其他对逻辑不重要的东西:

// assembly is an Assembly object
// derived is of type Derived, which is declared in assembly
// this line works fine
derived = assembly.CreateInstance(derivedClassName, true) as Base;

// this is fine    
derived.Foo();

// Exception happens here
derived.Bar();

这是 Base 的基础知识:

public abstract class Base : SomeOtherClass
{
    protected Base() : base() {}

    public void Foo()
    {
        // do stuff
    }
}

以下是 Derived 的基础知识:

public class Derived : Base
{
    // overrides SomeOtherClass.Foo(), which is the only abstract method
    protected override void Foo()
    {
        // do stuff
    }
}

【问题讨论】:

  • 你的环境是什么?这是桌面应用程序吗? Windows 商店/运行时应用程序?网络应用程序?您的应用针对的是哪个版本的 .net 框架?
  • Bar() 定义在哪里?
  • 你们走在正确的轨道上。 DerivedBase 是在不同的项目中定义的,我刚刚意识到它们针对不同版本的 .Net。看我的回答

标签: c#


【解决方案1】:

啊,找到问题了。 BaseDerived 在两个单独的项目中定义,它们针对两个不同版本的 .NET。请参阅this question 了解更多信息。

【讨论】:

    【解决方案2】:

    唯一缺少此泛型类型的mscorlibs 是2.0 之前的版本。检查您是否没有引用任何这些版本。

    【讨论】:

    • 不正确!用于命名类型参数的类型 Func`2(或 C# 语法中的 Func<,>)或 Func`2[T, TResult] 是 .NET 3.5 中的新增内容。在 .NET 2.0 中,这些代表中唯一的一个是 Action`1。一般的FuncAction 代表与Linq 一起来。
    • 不客气。例如,.NET 2 类型 List<> 有一个方法 ConvertAll<> 对应于 Linq 的 Select<,> 方法。 List<>.ConvertAll<> 方法接受一个委托Converter<TInput, TOutput>,它的签名和返回类型完全等同于后面的Func<T, TResult> 类型。
    【解决方案3】:

    我在 C++/CLI 项目中遇到了同样的问题。我无法在 C# 项目中使用来自 C++/CLI DLL 的类。我可以从代码 (Assembly.LoadFrom) 加载程序集,并且可以使用反射 (Assembly.CreateInstance) 创建我的类的实例,但如果我尝试在 C# 代码中使用类,我仍然会收到 TypeLoadException。

    我的问题是可执行文件,并且 Dll 具有相同的名称。

    • SomeProject.dll
    • SomeProject.exe

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-28
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多