无法加载文件或程序集...参数不正确。

213

最近在C#解决方案中,我遇到了以下异常:

错误2:无法加载文件或程序集“Newtonsoft.Json,Version=3.5.0.0, Culture=neutral,PublicKeyToken=b9a188c8922137c6”之一或其依赖关系。 参数不正确。 (HRESULT:0x80070057(E_INVALIDARG))

这与我的代码或程序集名称(例如本例中的Newtonsoft.Json)无关。

当我从解决方案中删除此dll时,编译器会在同一异常中提到另一个问题。 因此,我认为需要在我的计算机上关闭/打开某些功能 :)


3
不行。要么是编译器错误,要么是运行时异常。我怀疑是后者。请表述更清楚。 - leppie
2
我也遇到了同样的异常,但是我通过Thomas的解决方案成功修复了它。问题是由于电源故障导致系统关闭不当引起的。 - Sandeep
28个回答

350

看起来引用了一个损坏的程序集。

请清除以下两个位置:

  1. 你项目的 \bin 文件夹。

  2. 临时文件夹(位于 Windows 7 中的 C:\Users\your_username\AppData\Local\Temp\Temporary ASP.NET Files)。

然后观察是否还会出现错误。


3
Alex非常感谢你!第二个方法很有用:我清理了临时ASP.NET文件目录。 - Liker777
9
请参考@Thomas的答案以了解其他需要删除的位置(这对我很有效)。 - Simon_Weaver
3
谢谢。在一次严重的崩溃后清理用户临时文件夹对我解决了问题。 - Petrus Theron
删除临时文件后,错误仍然存在。我不得不重新启动计算机,然后错误消失了。 - DavGarcia
13
%TEMP%\Temporary ASP.NET Files C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files 如果您有其他版本的 .NetFramework,此列表将会增长。问题原因:蓝屏死机。 - NavaRajan
显示剩余9条评论

286

根据您是否运行X64,您可能需要清理更多地方。仅清理我的用户目录是不够的。

  1. %TEMP%\Temporary ASP.NET Files
  2. C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
  3. C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
  4. C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files
  5. C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files

如果您安装了其他版本的框架,此列表将会增长。


72
如果你的电脑在编译期间出现蓝屏,那么你可能需要这样做。 - Simon_Weaver
2
+1 精心编写的附加答案。这为我解决了问题,谢谢。 - Ralph Lavelle
7
如果你在以管理员身份运行 Visual Studio 时电脑崩溃,或者像我一样粗心大意,在电池用完时出现问题,那么这似乎是解决方案。 - Sav
4
天啊!我在那些地方找到了我史前项目的4GB以上资料!这个东西难道不会清理吗?!谢谢! - user2173353
2
只是想让你知道,两年过去了,这篇文章仍在帮助着人们。非常感谢。 - Laurence Frost
显示剩余6条评论

42

我必须清除

C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files

只有这样,问题才得以解决。


1
这个答案对我也起作用了,在64位Win 7机器上托管MVC 4在IIS Express中。 - Ben H

13

要确定需要清除哪些内容,请添加以下注册表键:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog (DWord set to 1).

然后您将看到以下输出。这告诉您 asp.net 正在尝试加载您的 DLL 的位置。请清空此目录。

LOG: This bind starts in default load context.
LOG: Using application configuration file: c:\app\AtlasAdvisor\web\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL **file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/3c8629f7/dfa387b6/Avanade.ViddlerNet.DLL.**
LOG: Attempting download of new URL **file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/3c8629f7/dfa387b6/Avanade.ViddlerNet/Avanade.ViddlerNet.DLL**.

3
需要进行 IIS 重置才能看到路径。 - Landon Poch
这个日志在哪里显示? - Luke Rice
当出现异常时,日志将显示在错误输出中。 - voidsstr

12

请在以下路径中清理项目的临时框架文件:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\

(Note: 保留 HTML 标记)

5

您还可以清除包目录并允许 NuGet 重新下载丢失的包

这对我解决了问题。


...而我只是删除了有问题的软件包目录。 - Phil Cooper
我删除了AppData temp和c:\ ... \ micorosoft.net \ .. \ temp中的temps,iisreset,...上面提到的所有内容。但是对我没有用。 一旦我删除了所有包并恢复它...它就可以使用了...非常感谢:D - bunjeeb
@bunjeeb,很高兴见到你:) - megz

4

删除这些文件夹中的所有文件:

C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files


3

只需清空此文件夹:(仅适用于Windows x64)

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files


3
从源代码控制中获取最新的二进制文件有所帮助。
谢谢。

2

当引用COM wrapper dlls时可能会出现这种情况。在您的Visual Studio项目中,选择引用下被引用的COM wrapper dlls,并确保它们具有以下属性值:"嵌入互操作类型":False 和 "特定版本":False。


这是一个很好的答案,应该得到更多的赞。所有其他答案都认为ASP.NET上下文是理所当然的。然而,在一个简单的控制台应用程序中,我遇到了同样的异常,由COM调用引起;这对我来说完美地解决了问题。谢谢您。 - alelom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接