System.Web.Razor.dll没有复制到bin文件夹

3
问题:
我们有一个ASP.Net 5.2.3项目,我们正在尝试将其升级到.NET 4.6。
运行时,我们收到以下错误消息:
“无法加载文件或程序集'System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'或其某个依赖项。系统找不到指定的文件。”
请注意,我们从NuGet安装了Microsoft.AspNet.Razor版本3.2.3,但错误消息引用了版本3.0.0.0。
解决方法:
现在,如果我手动复制...

packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll

TheWebProject\bin

该项目运行得很好。

GAC

请注意,有两个条目在

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Web.Razor

v4.0_1.0.0.0__31bf3856ad364e35

v4.0_2.0.0.0__31bf3856ad364e35

我知道存在于GAC中的DLL会忽略CopyLocal=True。不过,我不明白为什么该项目既无法从GAC解决引用,也不愿意将使用NuGet引用的版本复制到bin文件夹中。

web.config

我们在web.config中有以下绑定重定向,这些重定向可能是由NuGet安装程序放置的。
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>

我们还尝试将newVersion设置为“3.2.3.0”,以匹配NuGet包管理器中显示的版本。当我们将两者都更改为时:
<bindingRedirect oldVersion="0.0.0.0-3.2.3.0" newVersion="3.2.3.0" />

我们遇到了稍微不同的错误:
“无法加载文件或程序集'System.Web.WebPages.Razor'或其某个依赖项。所定位的程序集清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)”
问题:
应该如何设置项目引用以解决此问题?

你的 web.config 文件中是否有对 3.0.0.0 版本程序集的引用? - mjw
@mjw:是的,我更新了问题并提供了具体细节。 - Eric J.
1
你最终解决了这个问题吗? - philwilks
3个回答

1

这是一个很酷的命令,我之前不知道它。然而,在运行它之后,它对绑定重定向所做的更改与我们手动尝试的相同(将其更新为3.2.3)。 - Eric J.
可能存在一个单独的依赖程序集,它已经针对较旧版本的System.Web.Razor进行了编译? - mxmissile
当我们第一次开始深入研究这个问题时,团队成员中的一个人就曾经说过这句话 :-) - Eric J.
我们已经仔细检查过了,可能会有一个单独的依赖程序集,但是你的想法很好。 - Eric J.

0

正如我所猜测的那样,您的配置将其强制为3.0.0.0。请尝试这个:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <bindingRedirect oldVersion="3.0.0.0" newVersion="3.2.3.0" />
      </dependentAssembly>      
    </assemblyBinding>
  </runtime>

我们已经尝试过了。我更新了问题以使其更清晰,并显示了我们遇到的错误。 - Eric J.

0

尝试在引用列表中右键单击引用,然后将“复制本地”设置为“True”。


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