【问题标题】:Why isn't .NET looking in my output path for any binaries?为什么 .NET 不在我的输出路径中查找任何二进制文件?
【发布时间】:2017-10-25 00:07:57
【问题描述】:

我继承了一个 Visual Studio Web 项目,并且输出路径指定为 objd\amd64\。当我构建时,所有文件(编译后的项目文件以及包,如 MVC)都显示在那里。但是,当我按 F5 运行应用程序时,出现以下异常:

Could not load file or assembly 'System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

异常继续列出系统正在查找该(和其他)文件的位置。它首先看到的是bin,这是正常的输出文件夹。为什么 .NET 没有在 指定的 输出文件夹中查找,我怎样才能让它看起来在那里?

澄清:需要明确的是,此异常并非 MVC 独有。如果我手动创建 bin 文件夹并将 MVC DLL 复制到那里,那么我会克服这个异常,但会为它要查找的下一个文件获取另一个异常。如果我将所有文件复制到 bin,则应用程序运行良好。运行时只是没有在指定的输出文件夹中查找文件。

更新:如果我将输出路径更改为bin,则不会输出任何文件。我可以看到没有定义的构建后事件。

更新:这是我的构建设置。在我构建项目时甚至没有创建bin 文件夹(我试图使用bin 进行测试),更不用说将文件复制到其中了。当我按下 F5 时,Debug 绝对是选择的构建类型。

更新:以下是解决方案配置设置:

【问题讨论】:

  • 所以只是为了澄清。它实际上是在将 MVC 程序集复制到指定的目的地,但它没有在那里寻找它?我知道这是随机的,但如果是这样的话,你能去那个程序集检查它的版本以确保它与 5.2.3.0 匹配吗?
  • 没错。通常进入 bin 文件夹的所有内容都将进入指定的输出文件夹。如果我创建一个 bin 文件夹并在那里手动复制所有这些文件,它会在那里找到它们并运行。所以,它绝对是一切的正确版本。它只是在寻找输出所有文件的地方以外的地方。
  • 在您的参考文献列表中,该参考文献旁边是否有一个黄色小图标?您可能需要通过手动定位来修复参考?我不记得这是否是 NuGet 参考。如果是,您可以重新安装它,这也应该修复它。
  • 如果我手动将 MVC DLL 复制到 bin 文件夹,那么我会克服该错误并获得另一个错误。每个文件都会发生这种情况。如果我将所有文件复制到 bin,则项目运行良好。因此,文件都在那里并且是正确的。运行时只是在寻找错误的地方。
  • @KSib 否。所有参考资料都很好。并且文件都输出正常。运行时只是在寻找错误的地方。

标签: c# .net asp.net-mvc visual-studio-2015


【解决方案1】:

无法加载文件或程序集“System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或依赖项之一。系统找不到指定的文件。

错误是编译错误。这意味着构建在 MVC 运行时启动之前崩溃。

这很容易证明。删除 bin 文件夹并尝试再次编译。如果它没有重新创建和/或有很多文件丢失,这意味着构建没有完成。

可能导致这种情况的一些原因是:

  1. 解决方案中 2 个不同的 .csproj 文件之间的 MVC(和/或 MVC 依赖项)版本号不匹配。
  2. 您的.csproj 文件与web.config 和/或/Views/web.config 之间的MVC(和/或MVC 依赖项)版本号不匹配。
  3. 一个或多个 .csproj 文件对于 MVC(和/或 MVC 依赖项)DLL 引用位置具有无效的 <HintPath>
  4. NuGet package restore 根本没有设置或设置不正确。检查此问题的简单方法是查看您的 packages/ 文件夹,以查看错误消息中的引用是否存在于磁盘上。

解决此问题的最佳(最安全)方法是go through these files manually。在升级依赖版本或更改文件位置时,Visual Studio 并不总是做出正确的决定。

典型的 MVC 5 参考和版本在.csproj 文件中应该如下所示(您可能需要相应地调整版本号和<HintPath> 中的net45x 版本):

<Reference Include="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.Mvc.5.0.0\lib\net45\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.Razor.3.0.0\lib\net45\System.Web.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
</Reference>

更新

我看到你已经发布了 Visual Studio 的项目属性。该配置是高度自定义的,我不建议您使用 Visual Studio 的项目属性设计器对其进行编辑,因为这可能会导致配置损坏。

我的建议是使用以下过程来查看您的 .csproj 文件引用。这比删除引用并重新添加它们要安全得多,因为 Visual Studio 不支持编辑 .csproj 文件中可能存在的所有内容的方法。

  1. 在解决方案资源管理器中右键单击您的项目节点,然后单击卸载项目。
  2. 再次右键单击项目节点,然后单击编辑 .csproj。
  3. 在文件中搜索对上述每个程序集的引用,并相应地更新版本和 HintPath。确保您使用的 HintPath 实际上指向磁盘上的现有文件。
  4. 对解决方案中的所有依赖项目(以及不属于解决方案的 DLL 中的任何项目)重复这些步骤。

您还应该查看web.configViews/web.config 中的程序集版本(尤其是MVC 的版本),并在必要时更新它们。有关更多详细信息,请参阅link

【讨论】:

    【解决方案2】:

    更新应用程序 web.config 文件

    请务必在应用程序 web.config 文件中进行这些更改,而不是在 Views 文件夹中的 web.config 文件中。

    <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
               <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
               <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
            </dependentAssembly>
       </assemblyBinding>
    </runtime>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 2016-06-15
      • 2016-08-20
      • 2018-11-18
      相关资源
      最近更新 更多