【c#/MVC】未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral……

最新推荐文章于 2024-05-19 15:17:31 发布
最新推荐文章于 2024-05-19 15:17:31 发布 阅读量9.4k

所以在此给与后来人一个指示。

如果想直接看最后的解决办法,可以直接翻到最后。

问题:VS创建 默认MVC项目 后,运行时报错: 未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或它的某一个依赖项。

原因:访问的程序路径中包含了(#)号,导致无法访问,这个(#)往往是上一级目录。

以下为个人查询原因的经历,记录一下供自己以后回顾。

——————————————————————————————————————
首先我们来看报错:

“/”应用程序中的服务器错误。
未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) 
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.IO.FileLoadException: 未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 
程序集加载跟踪: 下列信息有助于确定程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”未能加载的原因。
=== 预绑定状态信息 ===
日志: DisplayName = System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 (Fully-specified)
日志: Appbase = file:///D:/#测试/MVC/MVC/
日志: 初始 PrivatePath = D:\#测试\MVC\MVC\bin
调用程序集: Microsoft.AspNet.TelemetryCorrelation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35。
日志: 此绑定从 default 加载上下文开始。
日志: 未找到应用程序配置文件。
日志: 使用主机配置文件: C:\Users\tr27\Documents\IISExpress\config\aspnet.config
日志: 使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 的计算机配置文件。
日志: 策略后引用: System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
日志: 尝试下载新的 URL file:///C:/Users/tr27/AppData/Local/Temp/Temporary ASP.NET Files/vs/26b9e87d/284b9cf9/System.Diagnostics.DiagnosticSource.DLL。
日志: 尝试下载新的 URL file:///C:/Users/tr27/AppData/Local/Temp/Temporary ASP.NET Files/vs/26b9e87d/284b9cf9/System.Diagnostics.DiagnosticSource/System.Diagnostics.DiagnosticSource.DLL。
日志: 尝试下载新的 URL file:///D:/#测试/MVC/MVC/bin/System.Diagnostics.DiagnosticSource.DLL。
警告: 比较程序集名称时发生不匹配: 修订号
错误: 未能完成程序集的安装(hr = 0x80131040)。探测终止。
堆栈跟踪: 
[FileLoadException: 未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)]
   Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule.Application_BeginRequest(Object sender, EventArgs e) +0
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +200
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +132
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +73

看到这个错误,最吸引我们注目的内容肯定是

未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) 

根据以往对“未能加载文件或程序集”的错误处理,我们会下意识的认为,是DLL文件的引用错误问题。

于是我们会自然而然的开始检查这三个地址:

日志: 尝试下载新的 URL file:///C:/Users/tr27/AppData/Local/Temp/Temporary ASP.NET Files/vs/26b9e87d/284b9cf9/System.Diagnostics.DiagnosticSource.DLL。
日志: 尝试下载新的 URL file:///C:/Users/tr27/AppData/Local/Temp/Temporary ASP.NET Files/vs/26b9e87d/284b9cf9/System.Diagnostics.DiagnosticSource/System.Diagnostics.DiagnosticSource.DLL。
日志: 尝试下载新的 URL file:///D:/#测试/MVC/MVC/bin/System.Diagnostics.DiagnosticSource.DLL。

如果我们去找了,我们会惊讶的发现,这三个地址里都有“System.Diagnostics.DiagnosticSource”这个DLL文件啊??

这是怎么回事?

如果你像我一样,也许此时就会开始猜测文件的版本问题。

于是开始搜索“System.Diagnostics.DiagnosticSource”这个DLL文件的版本问题。

如果你搜索到这个页面

那么,恭喜你,你接触到了NuGet包的使用方法。

如何把这个包引入到自己的工程里呢?

重新打开VS,搜索之后,工具》NuGet包管理器》程序包管理控制台,打开之后,在控制台输入命令……咦,为什么不能成功的下载?

然后经过搜索后,你发现:

  • NuGet(读作New Get)是用于微软.NET开发平台的软件包管理器,是一个Visual Studio的扩展。
  • 在使用Visual Studio开发基于.NET Framework的应用时,NuGet能够令你在项目中添加、移除和更新引用的工作变得更加快捷方便。
  • 通过NuGet你可以很容易的访问到其他开发者发布的软件包,你也可以创建、分享或者发布自己的包到NuGet。
  • 微软的EntityFramework、ASP.NET MVC等或者一些常用到的第三方软件包:Json.NET、NUnit等都托管到NuGet上。

原来,NuGet它是用来添加引用的!只能在项目中添加!它不会影响你没有添加过这些包的其他项目!

明白了这些的你打开项目,继续打开NuGet程序包管理控制台,继续在控制台输入命令:

PM>Install-Package System.Diagnostics.DiagnosticSource -Version 4.5.1

大概两三秒,添加完成,你信心满满的运行程序……

未能加载文件或程序集……

咳咳,忘记了具体是什么错误……

之后,根据百度到的各种信息,我们有了以下的收获。

  1. 未能加载文件或程序集……除了版本问题和丢失问题外,还有一种是因为系统X86和X64版本引发的问题,想要修改,可以对项目的解决方案-右键-属性,生成-平台目标:any cpu/x64/x86
  2. 当我们通过NuGet引用包后,有时也会出现这个问题,“未能加载文件或程序集“WebGrease, Version=1.5.1.25624, Culture=neutral, Publ”,这可能是程序集版本不兼容引起的,可以通过NuGet先把程序包删除,然后再安装最新或某个版本的程序包。通过"uninstall-package -f WebGrease"先卸载,然后通过"install-package WebGrease"再下载最新版本,问题解决

————————————————————————————————————————————

真正原因与解决方案:

就在我找了很多方案,按着上述行为不断重试并不断出现新的错误的时候,我没有发现一个很关键的信息。

“/”应用程序中的服务器错误。
D:/#测试/MVC

这个路径。

也就是说,IIS也很明显的给出了错误原因(“/”应用程序中的服务器错误)。

我喜欢在项目路径中放一个以“#”开头的文件夹,以保证起其的置顶效果。

如果看到这里的您也出现了这个搜便全网页找不到的错误的话,多半和我一样也是这个原因了。

如果想要保持置顶效果,将“#test”改成“01test”也有同样的效果~~~~

如果觉得对您有帮助,请右上角点个赞并评论一句吧~~~~~~

值得一提的是,在我另外一台电脑上我同样将项目安放在了带有“#”命名的文件目录下,此时通过浏览器加载IIS后,并没有出现问题。

不知道是因为之前已经运行过(在没有带“#”的另一个文件夹中)的原因,还是“.NET Framework”版本的问题,还是其他组件的影响(有怀疑是IIS部署器的版本问题)。

另外浏览器也有关系,chorem和IE的表现显著比edge要好。

【c#/MVC】未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral…… 今天在学习MVC模式时碰到了一个问题,在网上搜索后没有解决,最后才发现是一个很白痴的问题……不过倒是借机学会了很多新的东西……所以在此给与后来人一个指示。如果想直接看最后的解决办法,可以直接翻到最后。问题:VS创建默认MVC项目后,运行时报错:未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Cultu...
网上有很多关于如何解压缩zip文件的,他们都是用到了ZipArchive类。这个类在System.IO.Compression名命空间下,在.NET Framework 4.5加入。 我的程序是使用的.NET Framework 4.5.2 但是在该名命空间下并没有这个类,并且网上也没有相关的靠谱的解决方案。最后还是在外网中找到了解决方法。 失败的解决方案:在config中添加如下代码: <assemblies> <add assembly="System.IO.Compressi
最近在使用Windows窗体在新的电脑上运行时,出现错误提示, 未能加载文件程序“CefSharp.Core.Runtime.dll”或它的某一个依赖项。找不到指定的模块。 本篇就来讲讲怎么解决这个问题。
项目发布到IIS以后,报以下错误 出现以上问题的原因是,我的项目是在Framework 4.5.2下开发的,而发布程序的服务器FM版本是4.5 。我解决办法是安装Framework 4.6.2 具体办法如下: 1、下载离线版 Framework 4.6.2 2、开始安装Framework 4.6.2,安装时出现以下错误: 3、解决无证书的问题,参考连接安装framework 4...
NET 5连mysql数据库遇到的问题 System.NotSupportedException:“No data is available for encoding 1252. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.” 解决办法: nuget添加 代码中加入 Encoding.RegisterProvider(Co
在xml文件里配置 <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="
这个错误可能是由于在你的代码中同时引用了多个命名空间,这些命名空间都包含了PerformanceCounter类。为了解决这个问题,你可以在使用PerformanceCounter类的时候显式地指定命名空间,或者在代码开头使用 `using` 指令只引用一个命名空间。 以下是两种解决方法: 1. 显式地指定命名空间 ```csharp var process = System.Diagnostics.Process.GetCurrentProcess(); var cpuCounter = new System.Diagnostics.PerformanceCounter("Process", "% Processor Time", process.ProcessName, true); 2. 使用 `using` 指令只引用一个命名空间 ```csharp using System.Diagnostics; var process = Process.GetCurrentProcess(); var cpuCounter = new PerformanceCounter("Process", "% Processor Time", process.ProcessName, true); 这两种方法都可以解决命名空间冲突的问题,你可以选择其中一种来使用。
【c#/MVC】未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral…… 【javaWeb】 You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true... 【c#/MVC】未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral…… teodora13357: 兄弟 我也碰到这个问题了 也是没有特殊符号 现在你解决了吗 【局域网共享问题】0x80004005 much159: 不错,解决了问题 【c#】类型转换:Convert与Parse的区别与比较 思慾難平: Convert.ToInt32(double value) 我输入小数直接报错了 【c#/MVC】未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral…… 御坂10001号: 兄弟咱俩搜索的过程基本一样,可惜我的路径中没有#,没有任何特殊符号,所以还是没解决 【局域网共享问题】0x80004005 qq_43668406: