2010-10-03 11 views
0

J'ai créé un projet de classe/bibliothèque dans Visual Studio, une feuille de calcul dans l'espace de noms SS. Ensuite, j'ai créé une application de formulaire Windows, j'ai ensuite ajouté la DLL, et l'ai placée dans mon menu de ressources, et elle se construit très bien, cependant, à l'exécution, j'obtiens un TryLoadException, ce que la documentation semble dire signifie que ce n'est pas dans le assemblage, mais alors pourquoi compile-t-il très bien? En outre, je doute que ce soit un problème avec ma DLL, comme mon ami a fait une DLL similaire (correspondant aux mêmes API, mais construit différemment, et cela fonctionne pour son application Windows Forms), et je reçois toujours le TryLoadException.Utilisation de DLL à partir du projet C#, obtention d'une exception TryLoadException à l'exécution

Voici la procédure que j'ai suivie.

  1. Créer (et implémenter) la classe de feuille de calcul.
  2. Créez une nouvelle solution et un nouveau projet pour la feuille de calcul graphique.
  3. Dans le projet, faites un clic droit et ajoutez un élément existant, la DLL trouvée dans le premier dossier bin/debug (ou bin/release, j'ai essayé les deux). Aussi ajouté la DLL aux références.
  4. Quelque part dans le code get exécuté, ajoutez la ligne:

    feuille de calcul ss = nouvelle feuille de calcul(); // Ils sont déjà tous les deux dans le même espace de noms

  5. Build, notez qu'il n'y a aucune erreur.

  6. Exécuter, l'exécution s'arrête là avec l'exception TryLoadException.
+0

Faites un clic droit sur la référence et cochez l'attribut "Copier Local" - il devrait être vrai. –

+0

Oui, l'attribut local de copie était true. –

Répondre

1

Vous mettez la DLL dans votre menu de ressources? Cela semble vraiment étrange.

Certaines choses à essayer. Tout d'abord, après la construction, allez dans le dossier Debug (ou Release, selon ce que vous êtes sur le point d'exécuter) du projet Windows Forms. Vous devriez voir votre exe et la DLL dont vous avez besoin. Sinon, il y a un problème avec la façon dont vous définissez la référence, comme ne pas avoir CopyLocal ou autre chose. Deuxièmement, si votre DLL et votre application Windows Forms sont des projets dans la même solution, utilisez une référence de projet au lieu de naviguer vers la DLL. Cela rendra la vie un peu plus simple. Troisièmement, essayez de double-cliquer sur l'exe au lieu d'appuyer sur F5 et voir si cela affecte n'importe quoi. (Le répertoire actuel est différent dans ces deux cas, ce qui est souvent pertinent lorsque vous essayez de trouver des DLL.)

Quatrièmement, essayez de supprimer la référence, en supprimant la DLL des ressources ou de tout autre emplacement étrange, et en ajoutant la référence encore. Voyez si les choses se comportent mieux alors.

+0

Non, ce n'est pas ce que je voulais dire. J'ai ajouté la DLL elle-même au répertoire racine du projet, mais je l'ai mis dans ma liste de référence afin que je puisse y faire un lien. En tout cas, merci. Pour une raison magique, il a commencé à travailler aujourd'hui. Je ne suis toujours pas tout à fait certain de ce qui s'est passé, mais ça fonctionne maintenant, merci. –