Geo*_*uer 66 asp.net asp.net-mvc windows-update
我做了Windows更新,然后我的asp.net mvc 5应用程序将不再加载抱怨
CS0234: The type or namespace name 'Html' does not exist in the namespace 'System.Web.Mvc'
Run Code Online (Sandbox Code Playgroud)
表明我的观点web.config有错
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="Ogre.Extensions" />
<add namespace="Newtonsoft.Json"/>
</namespaces>
</pages>
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)
现在这非常令人困惑.在我的项目本身,我可以看到Html
命名空间,在ILSpy中打开我的程序集,我可以导航到绑定System.Web.Mvc
,我也可以,并且融合日志没有显示任何可疑的绑定错误.
这就好像只是我的观点被绑定(成功)到旧版本的Mvc.为什么会发生这种情况?我该如何解决?
让我明确指出,没有配置甚至代码更改.这是我在IISExpress上的开发机器上的全部内容.它正在运行,我做了更新并重新启动,现在它不再运行了.
这是我最近安装的更新.我可以一个接一个地删除它们,但我想知道实际上出了什么问题,因为我觉得我错过了故事的一部分.
Geo*_*uer 118
神圣的废话,感谢@ Nevada-Williford的暗示.进入并设置我的System.Web.Mvc
引用<Private>True</Private>
(Copy Local = True)修复它.请注意,在更新之前一切正常,更新后我不得不修改我的csproj以使其再次运行.
关于发生了什么的工作理论:
Copy Local = True
而<Private>True</Private>
曾经是差不多,但不完全是一回事.前者是Visual Studio设置,后者是msbuild设置.如果没有msbuild设置,则将应用Visual Studio设置(只要您在VS中).在此更新中,我认为他们更改了它,因此Copy Local
只反映了presence属性.
在我们的项目中,我们没有明确设置该属性,Copy Local = True
因此在将更新System.Web.Mvc.dll
复制到bin目录之前.更新后,由于缺少属性Copy Local
显示False
,您必须将其设置为True
以确保您获得本地副本.
手动设置Copy Local = True
(或将该xml元素添加到msbuild)可以解决问题.
编辑:虽然这似乎是具体问题的答案,但是来到这里的任何人都应该阅读评论主题和其他答案 - 特别是dmatson的 - 以获取更多背景信息,警告和相关错误.
dma*_*son 32
MS14-059没有CopyLocal=true
(或在MSBuild发言中<Private>True</Private>
)的任何用户都被破坏了.MVC模板默认设置,但是如果使用NuGet更新MVC版本,则会丢失该设置(请参阅NuGet bug#4344).<Private>True</Private>
这个问题有两个方面:
你看到问题#1.要解决这两个问题,我建议您进行以下两项更改:
将以下配置添加到Views\Web.config:
<system.web>
<compilation>
<assemblies>
<add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
</system.web>
Run Code Online (Sandbox Code Playgroud)设置CopyLocal=true
在VS UI的项目引用,或手动添加下面的下面一行Reference
在你的.csproj文件:
<Private>True</Private>
Run Code Online (Sandbox Code Playgroud)因此,您的完整参考应如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
请注意,如果将来再次更新软件包,NuGet将删除CopyLocal/Private设置.(例如,如果您今天更新到MVC 5.2).如果该版本的MVC是GAC,只要您在上面的步骤A中添加了配置,上述问题#1就不会重现,但问题#2仍然可能再次发生.为了确保将来不会发生这种情况,我建议您在进行NuGet包更新时手动将CopyLocal设置为true.
归档时间: |
|
查看次数: |
37219 次 |
最近记录: |