C# MVC4-无法加载文件或程序集';微软.Web.Infrastructure…';

C# MVC4-无法加载文件或程序集';微软.Web.Infrastructure…';,c#,.net,visual-studio,asp.net-mvc-4,C#,.net,Visual Studio,Asp.net Mvc 4,这是一个比较老的项目,我第一次尝试启动它。我得到这个错误: Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified VS2017上的MVC4(dotn

这是一个比较老的项目,我第一次尝试启动它。我得到这个错误:

Could not load file or assembly 'Microsoft.Web.Infrastructure, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of 
its dependencies. The system cannot find the file specified
VS2017上的MVC4(dotnet 4.5)应用程序

当我尝试保存更改时,
Copy Local
继续更改为back to
False
,因此我遇到了问题,但无法完全尝试接受的答案。此外,似乎表明我不应该篡改
Copy Local
属性,因此阻止我将
Copy Local
设置为
True
的行为似乎是故意的(或者可能表明“在全局程序集缓存中找到了程序集”)


为什么我不能设置
Copy Local
字段?关于如何在VS2017中尝试将
Copy Local
更新为
True
,您有什么想法吗?

可能缺少一个包。您可以运行以下操作来恢复依赖项:

nuget restore
如果不起作用,请尝试使用以下方法安装软件包:

Install-Package Microsoft.Web.Infrastructure -Version 1.0.0 

可能是缺少包。您可以运行以下操作来还原依赖项:

nuget restore
如果不起作用,请尝试使用以下方法安装软件包:

Install-Package Microsoft.Web.Infrastructure -Version 1.0.0 
并确保安装了正确的MVC4库

<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.Razor.4.0.20715.0\lib\net40\System.Web.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.WebPages.4.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
</Reference>

真的
..\packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll
真的
..\packages\Microsoft.AspNet.Razor.4.0.20715.0\lib\net40\System.Web.Razor.dll
真的
..\packages\Microsoft.AspNet.WebPages.4.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll
真的
..\packages\Microsoft.Web.Infrastructure.1.0.0\lib\net40\Microsoft.Web.Infrastructure.dll
请注意,MVC 4以.NET Framework 4.0为目标,但.NET Framework 4.5是一个目标,因此只要安装在开发机器上,您的应用程序就可以以.NET Framework 4.5为目标。MVC 4 NuGet软件包中没有
net45
目标,但您的应用程序仍然可以使用它们

您还可以通过手动编辑
.csproj
文件来更改
CopyLocal
设置,但我不确定这与您的问题有何关系

并确保安装了正确的MVC4库

<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.Razor.4.0.20715.0\lib\net40\System.Web.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.WebPages.4.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
</Reference>

真的
..\packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll
真的
..\packages\Microsoft.AspNet.Razor.4.0.20715.0\lib\net40\System.Web.Razor.dll
真的
..\packages\Microsoft.AspNet.WebPages.4.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll
真的
..\packages\Microsoft.Web.Infrastructure.1.0.0\lib\net40\Microsoft.Web.Infrastructure.dll
请注意,MVC 4以.NET Framework 4.0为目标,但.NET Framework 4.5是一个目标,因此只要安装在开发机器上,您的应用程序就可以以.NET Framework 4.5为目标。MVC 4 NuGet软件包中没有
net45
目标,但您的应用程序仍然可以使用它们

您还可以通过手动编辑
.csproj
文件来更改
CopyLocal
设置,但我不确定这与您的问题有何关系


在VS2015上的新Windows 10计算机和现有旧项目上遇到类似问题。 软件包管理器3.4.4。 已启用还原包

恢复似乎没有按预期工作。 必须在Package Manager命令行上运行以下命令

Update-Package -ProjectName "YourProjectName" -Id Microsoft.Web.Infrastructure -Reinstall
更改上述命令以包括“-Version”选项,以便在需要时针对特定版本。省略-Version和-Reinstall会将程序包更新为最新版本。 这在我的解决方案文件中添加了以下行 恢复没有做到这一点


。\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll
真的
只要将上述元素添加到我的项目文件中的ItemGroup部分,就可以解决问题,前提是存在..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll

只需重新安装就更容易了,但很容易理解它与包还原的不同之处


很可能以前版本的软件包管理器在最初添加解决方案文件时没有将上述更改添加到解决方案文件中,现在需要添加这些更改。

在VS2015上的新Windows 10计算机上以及现有的旧项目上遇到类似问题。 软件包管理器3.4.4。 已启用还原包

恢复似乎没有按预期工作。 必须在Package Manager命令行上运行以下命令

Update-Package -ProjectName "YourProjectName" -Id Microsoft.Web.Infrastructure -Reinstall
更改上述命令以包括“-Version”选项,以便在需要时针对特定版本。省略-Version和-Reinstall会将程序包更新为最新版本。 这在我的解决方案文件中添加了以下行 恢复没有做到这一点


。\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll
真的
只要将上述元素添加到我的项目文件中的ItemGroup部分,就可以解决问题,前提是存在..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll

只需重新安装就更容易了,但很容易理解它与包还原的不同之处


在最初添加解决方案文件时,包管理器的早期版本可能没有将上述更改添加到解决方案文件中,现在需要这样做。

在我的情况下,我从包文件夹中删除了文件夹Microsoft.Web.Infrastructure.1.0.0。
所以,它很好用!

在我的例子中,我从packages文件夹中删除了Microsoft.Web.Infrastructure.1.0.0文件夹。
所以,工作正常!

我认为
dotnet restore
只是一个dotnet core命令,不是吗?而且PM cmd没有运行,但表明它已经存在于项目中。抱歉,我最近使用NET core做了太多工作。在这种情况下,它是
nuget restore
。我更新了答案以反映这一点我认为
dotnet restore
只是一个d