J'ai écrit le test simple suivant pour essayer d'apprendre l'interface Fluent de Castle Windsor:
using NUnit.Framework;
using Castle.Windsor;
using System.Collections;
using Castle.MicroKernel.Registration;
namespace WindsorSample {
public class MyComponent : IMyComponent {
public MyComponent(int start_at) {
this.Value = start_at;
}
public int Value { get; private set; }
}
public interface IMyComponent {
int Value { get; }
}
[TestFixture]
public class ConcreteImplFixture {
[Test]
public void ResolvingConcreteImplShouldInitialiseValue() {
IWindsorContainer container = new WindsorContainer();
container.Register(Component.For<IMyComponent>().ImplementedBy<MyComponent>().Parameters(Parameter.ForKey("start_at").Eq("1")));
IMyComponent resolvedComp = container.Resolve<IMyComponent>();
Assert.AreEqual(resolvedComp.Value, 1);
}
}
}
Lorsque j'exécute le test via TestDriven.NET, j'obtiens l'erreur suivante:
System.TypeLoadException : Could not load type 'Castle.MicroKernel.Registration.IRegistration' from assembly 'Castle.MicroKernel, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc'.
at WindsorSample.ConcreteImplFixture.ResolvingConcreteImplShouldInitialiseValue()
Lorsque j'exécute le test via l'interface graphique NUnit, j'obtiens:
WindsorSample.ConcreteImplFixture.ResolvingConcreteImplShouldInitialiseValue:
System.IO.FileNotFoundException : Could not load file or assembly 'Castle.Windsor, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The system cannot find the file specified.
Si j'ouvre l'assemblage auquel je fais référence dans Reflector, je peux voir que ses informations sont:
Castle.MicroKernel, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
et qu'il contient définitivement Castle.MicroKernel.Registration.IRegistration
Que pourrait-il se passer?
Je dois mentionner que les binaires sont tirés de la dernière version de Castle bien que je n'ai jamais travaillé avec nant, donc je n'ai pas pris la peine de recompiler à partir des sources et j'ai juste pris les fichiers dans le répertoire bin. Je dois également souligner que mon projet se compile sans problème.
Si vous avez un projet référençant un autre projet (tel qu'un type «Application Windows» faisant référence à une «Bibliothèque de classes») et que les deux ont le même nom d'assembly, vous obtiendrez cette erreur. Vous pouvez soit nommer fortement le projet référencé, soit (encore mieux) renommer l'assemblage du projet de référencement (sous l'onglet 'Application' des propriétés du projet dans VS).
la source
La solution à cela pour moi n'a pas été mentionnée ci-dessus, alors j'ai pensé ajouter ma réponse à la longue queue ...
J'ai fini par avoir une ancienne référence à une classe (an
HttpHandler
) dans web.config qui n'était plus utilisée (et n'était plus une référence valide). Pour une raison quelconque, il a été ignoré lors de l'exécution dans Studio (ou peut-être que cette classe est toujours accessible dans ma configuration de développement?) Et je n'ai donc eu cette erreur qu'une fois que j'ai essayé de déployer sur IIS. J'ai cherché le nom de l'assembly dans web.config, supprimé la référence de gestionnaire inutilisée, puis cette erreur a disparu et tout fonctionne très bien. J'espère que ceci aide quelqu'un d'autre.la source
J'ai eu le même problème et pour moi cela n'avait rien à voir avec l'espace de noms ou la dénomination du projet.
Mais comme plusieurs utilisateurs l'ont laissé entendre, cela avait à voir avec un ancien assemblage toujours référencé.
Je recommande de supprimer tous les dossiers "bin" / binaires de tous les projets et de reconstruire la solution entière. Cela a éliminé tous les assemblages potentiellement obsolètes et après cela, MEF a exporté tous mes plugins sans problème.
la source
J'obtenais cette erreur et rien de ce que j'ai trouvé sur StackOverflow ou ailleurs ne l'a résolu, mais la réponse de bmoeskau à cette question m'a orienté dans la bonne direction pour le correctif, qui n'a pas encore été mentionné comme réponse. Ma réponse n'est pas strictement liée à la question d'origine, mais je la poste ici en supposant que quelqu'un ayant ce problème trouvera le chemin ici en recherchant sur Google ou quelque chose de similaire (comme moi dans un mois lorsque cela me mord à nouveau , arg!).
Mon assemblage est dans le GAC, il n'y a donc théoriquement qu'une seule version de l'assemblage disponible. Sauf que IIS met en cache l'ancienne version et me donne cette erreur. Je venais de changer, reconstruire et réinstaller l'assemblage dans le GAC. Une solution possible consiste à utiliser le Gestionnaire des tâches pour tuer w3wp.exe . Cela force IIS à relire l'assembly à partir du GAC: problème résolu.
la source
La version = 1.0.3.0 indique Castle RC3, mais l'interface fluide a été développée quelques mois après la sortie de RC3. Par conséquent, il semble que vous ayez un problème de version. Peut-être que Castle RC3 est enregistré dans le GAC et qu'il l'utilise ...
la source
Je reçois ça de temps en temps et ça a toujours été pour avoir l'assemblée dans le GAC
la source
Si cette erreur est causée par la modification de l'espace de noms, assurez-vous que le dossier de ce projet est renommé avec le même nom, et fermez VS.NET Modifiez le projet qui a le problème avec le Bloc-notes et remplacez-y les nœuds
"RootNamespace> New_Name_Of_Folder_Of_Your_Project_Namespace" RootNamespace> "AssemblyName> New_Name_Of_Folder_Of_Your_Project_Namespace" AssemblyName>
la source
La suppression de mon fichier .pdb pour la DLL a résolu ce problème pour moi. Je suppose que cela a quelque chose à voir avec le fait que la dll a été créée à l'aide d'ILMerge.
la source
Lorsque je rencontre un tel problème, je trouve l'outil FUSLOGVW très utile. Il vérifie les informations de liaison d'assembly et les enregistre pour vous. Parfois, les bibliothèques manquent, parfois GAC a différentes versions qui sont en cours de chargement. Parfois, la plate-forme des bibliothèques référencées est à l'origine des problèmes. Cet outil explique clairement comment les liaisons des dépendances sont résolues et cela peut vraiment vous aider à étudier / déboguer votre problème.
Visionneuse de journal de fusion / fuslogvw / Visionneuse de journal de liaison d'assemblage. Vérifiez plus / téléchargez ici: http://msdn.microsoft.com/en-us/library/e74a18c4.aspx .
la source
J'ai eu ce problème après avoir factorisé un nom de classe:
Could not load type 'Namspace.OldClassName' from assembly 'Assembly name...'.
L'arrêt d'IIS et la suppression du contenu dans l'ont
Temporary ASP.NET Files
corrigé pour moi.En fonction de votre projet (32/64 bits, version .net, etc.) le correct
Temporary ASP.NET Files
diffère:%systemroot%\Microsoft.NET\Framework64\{.netversion}\Temporary ASP.NET Files\
%systemroot%\Microsoft.NET\Framework\{.netversion}\Temporary ASP.NET Files\
%temp%\Temporary ASP.NET Files
la source
Peut-être pas aussi probable, mais pour moi, cela a été causé par mon application essayant de charger une bibliothèque avec le même nom d'assembly (xxx.exe chargeant xxx.dll).
la source
Rencontrez cela avec une autre cause:
exécution de tests unitaires en mode version mais la bibliothèque en cours de chargement était la version en mode débogage qui n'avait pas été mise à jour
la source
Encore une autre solution: les anciennes DLL pointant les unes vers les autres et mises en cache par Visual Studio dans
C:\Users\[yourname]\AppData\Local\Microsoft\VisualStudio\10.0\ProjectAssemblies
Quittez VS, supprimez tout ce qui se trouve dans ce dossier et Bob est votre oncle.
la source
J'ai eu le même problème. Je viens de résoudre ce problème en mettant à jour l'assemblage via GAC.
Pour utiliser gacutil sur une machine de développement, accédez à:
Start -> programs -> Microsoft Visual studio 2010 -> Visual Studio Tools -> Visual Studio Command Prompt (2010)
.J'ai utilisé ces commandes pour désinstaller et réinstaller respectivement.
Remarque: je n'ai pas désinstallé ma dll dans mon cas, je viens de mettre à jour la dll avec le chemin actuel.
la source
J'ai rencontré ce scénario en essayant de charger un type (via la réflexion) dans un assemblage qui a été construit avec une version différente d'une référence commune à l'application où cette erreur est apparue.
Comme je suis sûr que le type est inchangé dans les deux versions de l'assembly, j'ai fini par créer un résolveur d'assemblage personnalisé qui mappe l'assembly manquant à celui que mon application a déjà chargé. Le moyen le plus simple est d'ajouter un constructeur statique à la classe de programme comme ceci:
Cela suppose bien entendu que l'assemblage se trouve dans le chemin de démarrage de l'application et peut être facilement adapté.
la source
Rencontrez cela avec une autre cause:
J'utilisais un assemblage fusionné créé avec ILRepack. L'assembly à partir duquel vous interrogez les types doit être le premier passé à ILRepack, sinon ses types ne seront pas disponibles.
la source
Vous pourrez peut-être résoudre ce problème avec des redirections de liaison dans * .config. http://blogs.msdn.com/b/dougste/archive/2006/09/05/741329.aspx a une bonne discussion sur l'utilisation d'anciens composants .net dans des frameworks plus récents. http://msdn.microsoft.com/en-us/library/eftw1fys(vs.71).aspx
la source
Cela se produit généralement lorsque vous avez une version de votre assembly déployée dans le GAC mais n'a pas été mise à jour avec de nouvelles classes que vous avez peut-être ajoutées à l'assembly sur votre IDE. Par conséquent, assurez-vous que l'assembly sur le GAC est mis à jour avec les modifications que vous avez peut-être apportées à votre projet.
Par exemple, si vous avez une bibliothèque de classes de Common et dans cette bibliothèque de classes, vous avez le type Common.ClassA et déployez-le sur le GAC fortement nommé. Vous venez plus tard et ajoutez un autre type appelé Common.ClassB et vous exécutez votre code sur votre IDE sans d'abord déployer les modifications que vous avez apportées au GAC de Common avec le type Common.ClassB nouvellement ajouté.
la source
J'ai eu la même erreur après la mise à jour d'une dll référencée dans un projet exécutable de bureau. Le problème était, comme les gens l'ont mentionné ici, lié à une ancienne référence et simple à corriger, mais n'a pas été mentionné ici, alors j'ai pensé que cela pourrait faire gagner du temps à d'autres personnes.
Quoi qu'il en soit, j'ai mis à jour la dll A et obtenu l'erreur d'une autre dll référencée, appelons-la B ici où dll A a une référence à la dll B.
La mise à jour de la DLL B a résolu le problème.
la source
Ajout de votre DLL au GAC (Global Assembly Cache)
Invite de commandes Visual Studio => Exécuter en tant qu'administrateur
gacutil / i "chemin du fichier dll"
Vous pouvez voir l'assemblage ajouté C: \ Windows \ system32 \
Cela résoudra également les dll manquantes ou "Impossible de charger le fichier ou l'assembly" dans la tâche de script SSIS
la source
J'ai rencontré un problème similaire dans Visual Studio 2017 en utilisant MSTest comme cadre de test. Je recevais des exceptions System.TypeLoadException lors de l'exécution de certains (pas tous) tests unitaires, mais ces tests unitaires passaient lors du débogage. J'ai finalement fait ce qui suit qui a résolu le problème:
Après avoir suivi ces étapes, tous les tests unitaires ont commencé à réussir lors de leur exécution.
la source
J'ai vécu la même chose que ci-dessus après avoir supprimé la signature des assemblages dans la solution. Les projets ne se construiraient pas.
J'ai trouvé que l'un des projets faisait référence au package NuGet StrongNamer, qui modifie le processus de construction et tente de signer des packages Nuget non signés.
Après avoir supprimé le package StrongNamer, j'ai pu reconstruire le projet sans signer / nommer fort les assemblys.
la source
S'il s'agit d'une application Windows, essayez de rechercher un doublon dans le Global Assembly Cache (GAC). Quelque chose remplace votre version bin / debug.
S'il s'agit d'une application Web, vous devrez peut-être supprimer sur le serveur et retélécharger. Si vous publiez, vous pouvez cocher la case Supprimer tous les fichiers existants avant la publication. Selon la version de Visual Studio, il doit être situé dans Publier> Paramètres> Options de publication de fichier
la source
Je viens de résoudre ce problème en exécutant la commande iisreset à l'aide de l'invite de commande ... Toujours la première chose que je fais lorsque j'obtiens de telles erreurs.
la source