我继承了Visual Studio Web项目,输出路径指定为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.
。当我构建时,所有文件(包括已编译的项目文件以及软件包,如MVC)都显示在那里。但是,当我点击F5运行应用程序时,我得到以下异常:
bin
例外情况继续列出系统正在寻找那些(和其他)文件的位置。它看起来的第一个地方是bin
,这是正常的输出文件夹。为什么.NET不在指定的输出文件夹中查找,我怎样才能看到它?
澄清:为了清楚起见,此异常并非MVC独有。如果我手动创建bin文件夹并在那里复制MVC DLL,那么我将通过此异常,但是为它寻找的下一个文件获取另一个。如果我将所有文件复制到bin,那么应用程序运行正常。运行时只是在文件的指定输出文件夹中查找。
更新:如果我将输出路径更改为bin
,则在那里输出NO文件。我没有定义构建后事件。
更新:这是我的构建设置。我构建项目时甚至没有创建bin
文件夹(我正在尝试使用@app.route('/authorize/<provider>')
def oauth_authorize(provider):
if not g.user.is_anonymous:
return redirect(url_for('index'))
if provider == 'facebook':
return facebook_auth.authorize(callback=url_for('facebook_authorized',
next=request.args.get('next') or request.referrer or None,
_external=True))
进行测试),更不用说将文件复制到其中了。当我点击F5时,Debug肯定是选定的构建类型。
答案 0 :(得分:1)
无法加载文件或程序集“System.Web.Mvc,Version = 5.2.3.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其中一个依赖项 。系统找不到指定的文件。
错误是编译错误。这意味着在启动MVC运行时之前,构建正在崩溃。
这很容易证明。删除bin文件夹并尝试再次编译。如果没有重新创建和/或缺少大量文件,则意味着构建并未完全实现。
可能导致这种情况的一些事情是:
.csproj
文件之间的MVC(和/或MVC依赖项)版本号不匹配。.csproj
文件与web.config
和/或/Views/web.config
之间的MVC(和/或MVC相关性)版本号不匹配。.csproj
文件具有无效<HintPath>
。packages/
文件夹,查看错误消息中的引用是否存在于磁盘上。解决此问题的最佳(最安全)方法是go through these files manually。在升级依赖项版本或更改文件位置时,Visual Studio并不总是做出正确的决定。
.csproj
文件中的典型MVC 5引用和版本应该如下所示(您可能需要相应地调整net45x
中的版本号和<HintPath>
版本):
<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
文件中可能存在的所有内容的方法。
您还应该在web.config
和Views/web.config
中查看程序集版本(尤其是MVC的版本),并在必要时进行更新。有关更多详细信息,请参阅link。
答案 1 :(得分:0)
更新应用程序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>