无法从汇编错误加载types

我已经写了以下简单的testing,试图学习温莎城堡的stream利接口:

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); } } } 

当我通过TestDriven.NET执行testing时,出现以下错误:

 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() 

当我通过NUnit GUI执行testing时,我得到:

 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. 

如果我打开在Reflector中引用的程序集,我可以看到它的信息是:

 Castle.MicroKernel, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc 

而且它肯定包含了Castle.MicroKernel.Registration.IRegistration

会发生什么事?

我应该提到二进制文件是从Castle的最新版本中提取的,尽pipe我从来没有和nant一起工作过,所以我没有打扰从源代码重新编译,只是把文件放在bin目录下。 我也应该指出,我的项目编译没有问题。

全局程序集caching(GAC)中的程序集或任何可能覆盖您认为正在加载的程序集的地方? 这通常是不正确的程序集被加载的结果,对我来说,这意味着我通常在GAC中有一些东西来覆盖bin / Debug中的版本。

如果您有一个项目引用另一个项目(例如引用“类库”的“Windows应用程序”types),并且两者具有相同的程序集名称,则会出现此错误。 你可以强烈的命名被引用的项目,或者(甚至更好)重命名引用项目的组件(在VS中项目属性的“应用程序”选项卡下)。

对不起,以疏通一个老回答的问题,但解决这个问题我以上没有提到,所以我想我会加我的答案,长尾巴…

我结束了对web.config中的一个类(一个HttpHandler)的旧引用不再被使用(不再是一个有效的引用)。 出于某种原因,它在运行在Studio中时被忽略(或者我可以在我的开发环境中访问该类),所以我只有在尝试部署到IIS时才会出现此错误。 我search了web.config中的程序集名称,删除了未使用的处理程序引用,然后这个错误消失了,一切正常。 希望这可以帮助别人。

我有同样的问题,对我来说,它与命名空间或项目命名无关。

但是正如几位用户所暗示的那样,这与旧的组件仍然被引用有关。

我build议删除所有项目的所有“bin”/二进制文件夹,并重新构build整个解决scheme。 这淘汰任何可能过时的程序集,之后,MEF出口我所有的插件没有问题。

我得到这个错误,没有发现在StackOverflow或其他地方解决了它,但bmoeskau对这个问题的答案指出我正确的方向为修复,这是尚未提到的答案。 我的答案与原始问题没有严格的关系,但是我在这里发布它,假设有人遇到这个问题,会在这里通过searchGoogle或类似的东西(比如我自己一个月后再次咬我) ,arg!)。

我的程序集在GAC中,所以理论上只有一个版本的程序集可用。 除了 IIS有助于caching旧版本,并给我这个错误。 我刚换了一个,重新安装了GAC的程序集。 一个可能的解决scheme是使用任务pipe理器来杀死w3wp.exe 。 这迫使IIS重新从GAC中读取程序集:解决了问题。

版本= 1.0.3.0表示城堡RC3,但stream畅的界面是在RC3发布几个月后开发的。 因此,看起来你有一个版本问题。 也许你已经在GAC注册了Castle RC3,它正在使用那个…

我偶尔会遇到这个问题,并且总是在GAC中进行汇编

当遇到这样的问题时,我发现FUSLOGVW工具非常有帮助。 它正在检查程序集绑定信息并将其logging下来。 有时库缺失,有时GAC有不同的版本正在加载。 有时引用库的平台正在引起问题。 这个工具明确了依赖关系的绑定是如何解决的,这可能真的帮助你调查/debugging你的问题。

Fusion Log Viewer / fuslogvw / Assembly Binding Log Viewer。 检查更多/下载在这里: http : //msdn.microsoft.com/en-us/library/e74a18c4.aspx 。

只要碰到这个与另一个原因:

在发布模式下运行unit testing,但是被加载的库是没有被更新的debugging模式版本

只要碰到这个与另一个原因:

我正在使用ILRepack创build的合并程序集。 查询types的程序集必须是第一个传递给ILRepack的types,否则它的types将不可用。

如果这个错误是由更改命名空间引起的,请将该项目的文件夹重命名为相同的名称,然后closuresVS.NET编辑具有记事本问题的项目,并replace那里的节点

“RootNamespace> New_Name_Of_Folder_Of_Your_Project_Namespace”RootNamespace>“AssemblyName> New_Name_Of_Folder_Of_Your_Project_Namespace”AssemblyName>

我遇到过同样的问题。 我只是通过GAC更新程序集来解决这个问题。

要在开发计算机上使用gacutil,请转到: Start -> programs -> Microsoft Visual studio 2010 -> Visual Studio Tools -> Visual Studio Command Prompt (2010)

我用这些命令分别卸载和重新安装。

 gacutil /u myDLL gacutil /i "C:\Program Files\Custom\mydllname.dll" 

注意:我没有卸载我的DLL在我的情况下,我刚刚更新与当前path的DLL。

删除我的.pdb文件的DLL解决了这个问题给我。 我猜这与dll是使用ILMerge创build的事实有关。

您可能可以通过在* .config中绑定redirect来解决此问题。 http://blogs.msdn.com/b/dougste/archive/2006/09/05/741329.aspx在较新的框架中使用旧的;.net组件进行了很好的讨论。 http://msdn.microsoft.com/en-us/library/eftw1fys(vs.71).aspx

当您在GAC中部署了一个您的程序集版本时,通常会发生这种情况,但尚未使用在IDE上的程序集中添加的新类进行更新。 因此,请确保GAC上的程序集更新了您可能在项目中所做的更改。

例如,如果您有一个Common Library类,并且在该类库中有Common.ClassAtypes,并将其部署到强名称的GAC中。 稍后再添加一个名为Common.ClassB的types,并在IDE上运行代码,而无需首先使用新添加的Common.ClassBtypes部署对Common的GAC所做的更改。

另一个解决scheme是:旧的DLL指向对方,并由Visual Studio进行caching

C:\Users\[yourname]\AppData\Local\Microsoft\VisualStudio\10.0\ProjectAssemblies

退出VS,删除这个文件夹中的所有内容,Bob是你的叔叔。

在更新桌面可执行项目中引用的dll后,我得到了同样的错误。 问题在于这里提到的人提到了一个老的参考,很简单,但是这里没有提到,所以我想这可能会节省别人的时间。

无论如何,我更新DLL A,并从另一个引用的DLL得到的错误让我们称之为B在这里,DLL A有一个引用DLL B.

更新DLL B解决了这个问题。

将您的DLL添加到GAC(全局程序集caching)

Visual Studio命令提示符=>以pipe理员身份运行

gacutil /我的“dll文件path”

你可以看到添加的程序集C:\ Windows \ system32 \

它也将解决DLL丢失或SSIS脚本任务中的“无法加载文件或程序集”

在考虑类名后,我有这个问题:
Could not load type 'Namspace.OldClassName' from assembly 'Assembly name...'.

停止IIS并删除Temporary ASP.NET Files的内容为我解决了这个问题。

根据你的项目(32 / 64bit,.net版本等)正确的Temporary ASP.NET Files不同:

  • 64位
    %systemroot%\Microsoft.NET\Framework64\{.netversion}\Temporary ASP.NET Files\
  • 32位
    %systemroot%\Microsoft.NET\Framework\{.netversion}\Temporary ASP.NET Files\
  • 在我的开发机器上(因为它的IIS Express可能?)
    %temp%\Temporary ASP.NET Files

我只是通过使用命令提示符运行iisreset命令来解决这个问题。当我得到这样的错误时,总是我做的第一件事情。