C#中未处理TypeLoadException

本文关键字:TypeLoadException 未处理 | 更新日期: 2023-09-27 18:27:06

我对C#还很陌生,在将库加载到程序中时遇到了问题。我试图在visual studio中运行这个例子,但我遇到了一个错误:

TypeLoadException was unhandled. Can't load type SVM.Problem from assembly SVM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

这就是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SVM;
namespace SVM
{
class Program
{
    static void Main(string[] args)
    {
        //First, read in the training data.
        Problem train = Problem.Read("a1a.train");
        Problem test = Problem.Read("a1a.test");
        //For this example (and indeed, many scenarios), the default
        //parameters will suffice.
        Parameter parameters = new Parameter();
        double C;
        double Gamma;
        //This will do a grid optimization to find the best parameters
        //and store them in C and Gamma, outputting the entire
        //search to params.txt.
        ParameterSelection.Grid(train, parameters, "params.txt", out C, out Gamma);
        parameters.C = C;
        parameters.Gamma = Gamma;
        //Train the model using the optimal parameters.
        Model model = Training.Train(train, parameters);
        //Perform classification on the test data, putting the
        //results in results.txt.
        Prediction.Predict(test, "results.txt", model, false);
    }
}

}

我已经通过解决方案资源管理器添加了dll作为引用。可能出了什么问题?


我已经开始了一个新的项目,添加了dll作为参考,运行了这个项目,现在一切都正常了。不知道出了什么问题非常令人沮丧,但我怀疑这与项目名称和dll名称相同有关。谢谢你的帮助!

C#中未处理TypeLoadException

EDIT:好吧,由于你的回答,我现在已经成功地在没有SVM的情况下重现了这个问题。基本上,你不应该有两个同名的程序集,一个在.exe中,另一个在.dll中

Library.cs:

public class Library
{
    public static void Foo()
    {
        System.Console.WriteLine("Library.Foo");
    }
}

测试.cs:

public class Test
{
    static void Main(string[] args)
    {
        Library.Foo();
    }
}

编译:

> csc /target:library /out:Test.dll Library.cs
> csc /r:Test.dll Test.cs

运行:

> test.exe
Unhandled Exception: System.TypeLoadException: Could not load type 'Library' from
assembly 'Test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.+
    at Test.Main(String[] args)

它已经从Test.exe加载了一个名为Test的程序集…所以它不会查找Test.dll。

我想把它作为一个评论添加(但还不够高)-我有这个确切的问题,发现@JonSkeet的答案真的很有用,在我和一位同事之间,我们偶然发现了答案;

https://stackoverflow.com/a/13236893/692942.

基本上,我的项目程序集生成了一个EXE文件,其名称与我作为类库构建的引用程序集相同。生成目录中EXE和DLL的组合导致引发错误,因为只能加载一个同名程序集。

相关文章:
  • 没有找到相关文章