我有一个我试图托管的webproject,但是当服务器尝试编译它时,我收到以下错误:
未处理的异常:System.IO.FileLoadException:无法加载文件 或汇编' Microsoft.CodeAnalysis,Version = 1.1.0.0,Culture = neutral, 公钥= 31bf3856ad364e35'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT异常:0x80131040) ---> System.IO.FileLoadException:无法加载文件或程序集' Microsoft.CodeAnalysis,Version = 1.0.0.0,Culture = neutral, 公钥= 31bf3856ad364e35'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT的例外情况:0x80131040)
---内部异常堆栈跟踪结束---在Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(String [] args)
因此,服务器的CodeAnalysis版本比我的项目早。所以让我们尝试绑定重定向!
<dependentAssembly>
<assemblyIdentity name="Microsoft.CodeAnalysis" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.9.9.9" newVersion="1.0.0.0" />
</dependentAssembly>
可悲的是,我仍然得到同样的错误。我做错了什么?
答案 0 :(得分:34)
我自己想出来了。对于阅读此内容的任何人来说,问题是Nuget包Microsoft.CodeDom.Providers.DotNetCompilerPlatform
(也包含CodeAnalysis包)是错误的版本。我创建了一个新的webproject,立即更新了有问题的Nuget包,问题解决了。
答案 1 :(得分:4)
我解决了这个问题,但确保我的web.config中程序集的版本号是正确的。
修改强>
我也遇到了这个问题,有些人可能想知道Web.Config是如何变得不正确的。在我的情况下,我使用Web.Config Transforms,因此Web.Config文件被覆盖:
将Web.Configs编译器(在Web.Template.Config中)中的版本号更改为与NuGet版本匹配的数字 解决问题:
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0
答案 2 :(得分:4)
其他可能的修复(至少对于Visual Studio 2015):
获取最新的Visual Studio更新。
您可以转到Tools/Extensions and Updates/Updates
答案 3 :(得分:1)
我今天在进行Umbraco v7.13.0升级时遇到了这个问题,只需更新以下软件包即可解决我的问题,这显然是Umbraco upgrades之类的常见问题。
Update-Package -Reinstall Microsoft.CodeAnalysis.CSharp
答案 4 :(得分:0)
如果没有提到的选项,请转到这个答案。基本上,您将 Microsoft.CodeAnalysis.dll 注册到GAC
答案 5 :(得分:-1)
右键单击您的项目>>管理Nuget软件包管理器以获取解决方案>>点击更新>>更新您的“ Microsoft.CodeDom.Providers.DotNetCompilerPlatform” >>,然后再次运行您的项目。