Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Web.Razor.dll未复制到bin文件夹_C#_.net_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# System.Web.Razor.dll未复制到bin文件夹

C# System.Web.Razor.dll未复制到bin文件夹,c#,.net,asp.net-mvc,asp.net-mvc-5,C#,.net,Asp.net Mvc,Asp.net Mvc 5,问题 我们有一个ASP.NET5.2.3项目,正在尝试升级到.NET4.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\

问题

我们有一个ASP.NET5.2.3项目,正在尝试升级到.NET4.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

Web项目\bin

这个项目运行得很好

GAC

请注意,中有两个条目

C:\Windows\Microsoft.NET\assembly\GAC\U MSIL\System.Web.Razor

v4.0_1.0.0.0_31bf3856ad364e35

v4.0_2.0.0.0_31bf3856ad364e35

我知道那些DLL是。但是,我不明白为什么项目既无法解析来自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的异常:0x8013100)

问题


如何设置项目引用以解决此问题?

尝试右键单击引用列表中的引用,并将“Copy Local”设置为“True”。

正如我所怀疑的,您的配置正在将其强制设置为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>

您需要将程序集重定向添加到*.config文件中。打开软件包管理器控制台并输入以下命令:
addbindingRedirect[-ProjectName]


参考资料:和

您的web.config中是否有3.0.0.0程序集的参考资料?@mjw:是的,用细节更新了问题。您是否了解了问题的真相?我们已经尝试过了。我更新了问题以使其更清楚,并显示了我们得到的错误。这是一个很酷的命令,我不知道。但是,在运行它之后,它对绑定重定向进行了与我们手动尝试的相同的更改(将其更新为3.2.3)。是否有一个独立的依赖程序集已针对较旧版本的System.Web.Razor进行编译?这正是我们第一次开始深入研究时团队成员所说的:-)
是否有一个独立的依赖程序集
我们对此进行了仔细检查,但考虑得很好。