相关疑难解决方法(0)

版本3.0.0.1的ASP.NET MVC安全补丁打破了构建

安装ASP.NET MVC 3安全更新后KB2990942,MVC版本似乎从3.0.0.0增加到3.0.0.1.这会导致Visual Studio不再找到引用.

<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Run Code Online (Sandbox Code Playgroud)

Resharper没有显示任何问题,但构建失败,有许多未解析的MVC类型和警告:

警告:无法解析此引用.无法找到程序集"System.Web.Mvc,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL".检查以确保磁盘上存在程序集.如果您的代码需要此引用,则可能会出现编译错误.

这种做法很有道理.我的机器上不再存在此版本.

我无法保证dev机器,构建服务器和生产服务器上的确切MVC版本.他们可能有3.0.0.03.0.0.1可能随时改变.Windows Update可能随时发布新的MVC版本.此外,每当发布MVC更新时,我都不希望增加所有*.csproj文件中的版本号.

更新会影响多个版本:

安全公告:MS14-059:ASP.NET MVC中的漏洞可能允许安全功能绕过(2990942)

处理这种情况的最佳方法是什么?如何在未来的MVC更新中展开构建和生产并保持安全?

.net versioning asp.net-mvc assembly-references assembly-binding-redirect

107
推荐指数
3
解决办法
5万
查看次数

Windows更新后"命名空间'System.Web.Mvc'中不存在类型或命名空间名称'Html'"

我做了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上的开发机器上的全部内容.它正在运行,我做了更新并重新启动,现在它不再运行了.

这是我最近安装的更新.我可以一个接一个地删除它们,但我想知道实际上出了什么问题,因为我觉得我错过了故事的一部分.

从更新安装

asp.net asp.net-mvc windows-update

66
推荐指数
4
解决办法
4万
查看次数

自MS14-059以来,System.Web.MVC未复制到bin文件夹中.如何防止因Windows更新而导致缺少DLL的构建?

今天早上据报道,我们的QA服务器上的网络应用程序完全被破坏,并报告了来自Web.config的以下错误:

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

记住眼看提到MVC一个Windows更新,我做了一些挖掘和发现大量 报告最近的Windows更新打破MVC.

在仔细研究了这些问题和我们的服务器之后,似乎被咬过的东西与那些其他问题中的东西不匹配,但它看起来确实相关.这是我们认为的知识:

  • 我们破解的应用程序使用ASP.NET MVC 5.1
  • MVC是通过NuGet安装的
  • 我们的BuildServer和QA服务器没有安装MVC 5.1(因此,不是GAC)

我们认为已经破坏的原因导致了"糟糕的构建":

  • 尽管没有在GAC中安装MVC 5.1,但是通过Windows Update在BuildServer上安装了MVC 5.1补丁
  • 该补丁已将"更新"版本的MVC 5.1置于GAC中
  • 当DLL在GAC中时,将忽略CopyLocal = true; 因此,自补丁以来,这意味着我们从BuildServer构建的应用程序不再在输出文件夹中有System.Web.MVC
  • 由于System.Web.MVC不在我们的QA服务器上的GAC中(它们尚未修补),因此应用程序现在失败,因为找不到System.Web.MVC

假设上述行为是正确的,这意味着任何时候MS通过Windows Update 在GAC中为NuGet DLL提供服务,我们的BuildServer将开始生成不完整的构建(错过那些已经注入GAC的DLL) .

升级到MVC 5.2解决了这个问题(可能是因为它没有修补,因此没有注入GAC); DLL现在已复制到输出文件夹.除了版本号更改(特别是没有<Private>添加/编辑节点)之外,差异没有变化升级到5.2.2 .

我们不希望开始GACing所有内容,也不希望创建手动构建步骤将所有DLL复制到bin文件夹中,以防MS修补它们.

那么,今天我们可以改变什么来确保我们不会最终导致BuildServer默默地产生错误的构建,如果MS将来修补其他DLL?

.net windows asp.net security asp.net-mvc

36
推荐指数
2
解决办法
1万
查看次数

怎么解决?假设程序集引用'System.Web.Mvc

参考问题/ 26393157/windows-update-caused-mvc3-and-mvc4-stop-working.解决下面警告的最快方法是什么?

假设程序集引用'System.Web.Mvc,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'匹配'System.Web.Mvc,Version = 4.0.0.1,Culture = neutral,PublicKeyToken = 31bf3856ad364e35',您可能需要提供运行时策略.

.net c# asp.net-mvc asp.net-mvc-4

22
推荐指数
2
解决办法
3万
查看次数

Window Update Broke MVC应用程序

我昨天运行了Windows Update,当我尝试发布我的ASP.NET MVC 4项目的新版本时,它引入了一些问题.

应用程序在本地编译并运行正常,但是当我将版本推送到我的网络服务器上的测试站点时,它会出现错误消息:

System.Web.HttpCompileException: (0): error CS1705: Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Run Code Online (Sandbox Code Playgroud)

经过一些研究后,我发现这是由于从4.0.0.0更新到4.0.0.1.我从我的项目中删除了System.Web.Mvc dll并读取了具有更高版本的dll.一切都在本地工作,但不在网络上.然后我浏览了web.config并将任何提及的4.0.0.0更改为4.0.0.1.同样,这继续在内部工作但在外部失败.错误消息是:

    
Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack …

asp.net-mvc asp.net-mvc-4

9
推荐指数
1
解决办法
1万
查看次数

如何处理从ASP MVC版本4.0.0.0到4.0.0.1的转换

这是Windows更新的后续原因导致MVC3和MVC4停止工作

我还遇到了我的开发机器上的Windows更新导致我的MVC 4项目停止工作的问题.我将程序集引用更改为目标版本4.0.0.1,它开始工作.为了我.

我的问题是该应用程序然后部署在许多Web服务器上.实际上,我们有一个构建服务器,其中构建了客户版本,然后是一些Web服务器.

第一个问题:当我们在生产服务器上运行Windows更新时,旧版本的应用程序将停止工作吗?我猜这个答案是肯定的.我们还没有在构建或生产机器上运行Windows更新.

更改引用意味着它不再可以在构建计算机上构建.我可以通过将Specific Version标志设置为false并将Local Local设置为true来解决此问题.然后它建立在我的开发环境和构建服务器上.

问题:如果我的特定版本为假,检查有多松散? 它允许4.0.0.x吗?4.0.xx?4.xxx?还是xxxx?

但是,它甚至在thsi配置中构建它然后无法在测试Web服务器上运行(无法找到程序集).这里的问题是我的web.config中有以下内容(根据我从MVC 2升级到MVC 4时的微软说明):

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity culture="neutral" name="System.Web.Mvc" publicKeyToken="31BF3856AD364E35"/>
    <bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect newVersion="4.0.0.0" oldVersion="1.0.0.0-3.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>
Run Code Online (Sandbox Code Playgroud)

问题是这条线

<bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/>
Run Code Online (Sandbox Code Playgroud)

用于System.Web.Mvc程序集.(当然,它4.0.0.0不是说4.0.0.1那一行.)如果我改回4.0.0.0测试服务器那么它就可以了.

我的问题是双重的.部分原因是我希望能够在本地和我们的构建/生产服务器上构建和运行.但是,我们遇到一些情况,我们在同一台服务器上托管了许多运行不同版本应用程序的客户.我们不能强迫所有客户立即升级到最新版本只是因为这个Windows更新修复 - 除了Web应用程序只是更大的应用程序套件的一部分,所以我们必须强制他们升级这个批次!

我想一个选项是检查每个仍在使用的旧版本,更新MVC版本号并创建一个新版本.然后,当我们更新Web服务器时,我们必须将该服务器上的所有客户更新为其当前版本的新(4.0.0.1兼容)版本.我真的希望尽可能避免更新,提交和重建那么多版本.

另一个选择是不在Web服务器上运行Windows更新,并尝试在构建计算机上安装4.0.0.0和4.0.0.1 dll.然后我们可以构建新旧版本.由于任何新版本(使用4.0.0.1)都在MVC程序集上将CopyLocal设置为true(旧版本没有),因此它们应该能够部署到Web服务器,而不会更新Web服务器本身.

问题:

  • 有谁知道是否可以同时安装两个版本?我希望我可以简单地保存4.0.0.0 dll,运行Windows更新然后复制到旧的dll和新的一起回到GAC.
  • 这个补丁修复的安全风险有多严重? 允许人们运行旧版本一段时间是一个问题吗?只是让Web服务器上的旧.dll存在安全风险,或者只针对使用它的应用程序? …

asp.net-mvc windows-update asp.net-mvc-4

5
推荐指数
1
解决办法
1162
查看次数

编译器错误 CS0433 - GAC 和临时 ASP.NET 文件中都存在该类型

我遇到过这样的情况:运行 ASP.NET MVC4 时出现运行时错误。我最近从 MVC3 迁移到 MVC4。

启动调试器后,我立即遇到以下错误消息:

类型“System.Web.Mvc.WebViewPage”存在于“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\promotionweb\20a5681f\9ce59023\ assembly\dl3\29f671cf\37f0bcf2_4619d001\”中System.Web.Mvc.DLL'和'c:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Web.Mvc \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.Web.Mvc.dll'

我在 IIS 7.5 中运行,具有 MVC 项目本身的解决方案设置、另一个 C# 库以及一个控制台应用程序项目。

我已经尝试了此答案中提到的所有步骤,这些步骤源自类似的问题。然而,它对我来说根本没有帮助。

我有一些怀疑它必须对不同的编译模型执行,所以我尝试编译 x86 和 AnyCPU,并清理上面提到的所有目录。似乎没有什么帮助。

有什么想法可能会导致 GAC 和我的临时 ASP.NET 文件之间出现这种干扰吗?

c# asp.net temporary-asp.net-files iis-7.5

5
推荐指数
1
解决办法
1万
查看次数