TypeLoadException n'a pas été gérée en C #
Je suis assez novice en C#, et je rencontre un problème lors du chargement d'une bibliothèque dans mon programme. Im essayant d'exécuter cette exemple dans visual studio, mais j'obtiens une erreur:
TypeLoadException was unhandled. Can't load type SVM.Problem from assembly SVM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
C'est ce que mon code ressemble à ceci:
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);
}
}
}
J'ai ajouté le fichier dll comme une référence par l'intermédiaire de l'explorateur de solutions. Ce qui pourrait mal se passer?
J'ai commencé un nouveau projet, a ajouté la dll en tant que référence, couru le projet et maintenant tout fonctionne. Très frustrant de ne pas savoir ce qui s'est passé, mais je soupçonne qu'il avait quelque chose à voir avec le nom du projet et le nom de la dll d'être le même. Merci pour votre aide!
source d'informationauteur Freek8
Vous devez vous connecter pour publier un commentaire.
EDIT: Bon, suite à votre réponse, j'ai maintenant réussi à reproduire le problème sans SVM. En fait, vous ne devriez pas avoir deux assemblées, avec le même nom, l'une dans une .exe et une dans un .dll. Voici un exemple:
De la bibliothèque.cs:
Test.cs:
Compiler:
Exécuter:
Il est déjà chargé d'une assemblée appelée
Test
de Test.exe... donc il ne va pas aussi chercher Test.dll.Je voulais ajouter un commentaire (mais pas assez haut représentant pour l'instant) - j'ai eu exactement ce problème et trouvé @JonSkeet réponse vraiment utile, entre moi et un collègue, nous sommes tombés sur la réponse;
https://stackoverflow.com/a/13236893/692942.
Fondamentalement, mon projet de l'assemblée qui a généré un fichier EXE a le même nom que d'un assemblage j'ai construit comme une bibliothèque de classe. La combinaison de l'EXE et la DLL dans le répertoire de construction la cause de l'erreur d'être jeté comme une seule assemblée de ce nom a pu être chargé.