Подтвердить что ты не робот

Исключение TypeLoadException не было обработано в С#

Я новичок в С#, и у меня проблема при загрузке библиотеки в мою программу. Я пытаюсь запустить этот пример в 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 в качестве ссылки через explorer. Что может быть не так?


Я начал новый проект, добавил dll в качестве ссылки, запустил проект, и теперь все работает. Очень расстраивает, чтобы не знать, что пошло не так, но я подозреваю, что это связано с именем проекта и именем dll. Спасибо за помощь!

4b9b3361

Ответ 1

EDIT: Хорошо, из-за вашего ответа мне удалось воспроизвести проблему без SVM. В принципе, у вас не должно быть двух сборок с тем же именем: одно в .exe и одно в .dll. Вот пример:

Library.cs:

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

Test.cs:

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

Compile:

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

Run:

> 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 из Test.exe... поэтому он не будет также искать Test.dll.

Ответ 2

Я хотел добавить это как комментарий (но пока не достаточно высокий показатель). У меня была эта точная проблема, и я нашел ответ @JonSkeet действительно полезным, между мной и коллегой мы наткнулись на ответ;

fooobar.com/info/528307/....

В основном моя сборка проекта, которая сгенерировала EXE файл, была названа той же, что и ссылочная сборка, которую я построил как библиотеку классов. Комбинация EXE и DLL в каталоге сборки вызывает появление ошибки, поскольку может быть загружена только одна сборка этого имени.