【问题标题】:ASP.NET MVC 2 InputExtensions different on server than local machine服务器上的 ASP.NET MVC 2 InputExtensions 与本地计算机不同
【发布时间】:2011-02-15 06:39:50
【问题描述】:

所以这对我来说是一个疯狂的问题,但我没有运气谷歌搜索它。我有一个 ASP.NET MVC 2 应用程序(在 .NET 4.0 下)在本地运行得很好。当我将它上传到我的生产服务器(在共享主机下)时,我得到了

编译器错误消息:CS1061: 'System.Web.Mvc.HtmlHelper' 没有 包含“TextBoxFor”的定义并且没有扩展方法 'TextBoxFor' 接受类型的第一个参数 'System.Web.Mvc.HtmlHelper' 可能是 找到(您是否缺少 using 指令或程序集引用?)

对于此代码:

<%= this.Html.TextBoxFor(person => person.LastName) %>

这是 MVC 2 中新的标准扩展方法之一。所以我写了一些诊断代码:

       System.Reflection.Assembly ass = System.Reflection.Assembly.GetAssembly(typeof(InputExtensions));

       Response.Write("From GAC: " + ass.GlobalAssemblyCache.ToString() + "<br/>");
       Response.Write("ImageRuntimeVersion: " + ass.ImageRuntimeVersion.ToString() + "<br/>");
       Response.Write("Version: " + System.Diagnostics.FileVersionInfo.GetVersionInfo(ass.Location).ToString() + "<br/>");
       
       foreach (var method in typeof(InputExtensions).GetMethods())
       {
           Response.Write(method.Name + "<br/>");
       }

在本地运行(运行良好),我将其作为输出:

来自 GAC:是的 ImageRuntimeVersion:v2.0.50727 版本:文件:C:\Windows\assembly\GAC_MSIL\System.Web.Mvc\2.0.0.0__31bf3856ad364e35\System.Web.Mvc.dll 内部名称:System.Web.Mvc.dll 原始文件名:System.Web.Mvc.dll 文件版本: 2.0.50217.0 文件描述: System.Web.Mvc.dll 产品: Microsoft® .NE​​T Framework ProductVersion: 2.0.50217.0 调试: False 已修补: False PreRelease: False PrivateBuild: False SpecialBuild: False 语言: Language Neutral 复选框 复选框 复选框 复选框 复选框 复选框 CheckBoxFor CheckBoxFor CheckBoxFor 隐 隐 隐 隐 隐藏的 隐藏的 隐藏的 密码 密码 密码 密码 密码为 密码为 密码为 单选按钮 单选按钮 单选按钮 单选按钮 单选按钮 单选按钮 单选按钮 单选按钮 单选按钮 文本框 文本框 文本框 文本框 文本框 文本框 文本框 字符串 等于 获取哈希码 获取类型

当在生产服务器上运行时(失败),我看到:

来自 GAC:是的 ImageRuntimeVersion:v2.0.50727 版本:文件:C:\Windows\assembly\GAC_MSIL\System.Web.Mvc\2.0.0.0__31bf3856ad364e35\System.Web.Mvc.dll 内部名称:System.Web.Mvc.dll 原始文件名:System.Web.Mvc.dll 文件版本: 2.0.50217.0 文件描述: System.Web.Mvc.dll 产品: Microsoft® .NE​​T Framework ProductVersion: 2.0.50217.0 调试: False 已修补: False PreRelease: False PrivateBuild: False SpecialBuild: False 语言: Language Neutral 复选框 复选框 复选框 复选框 复选框 复选框 隐 隐 隐 隐 隐 隐 密码 密码 密码 密码 单选按钮 单选按钮 单选按钮 单选按钮 单选按钮 单选按钮 文本框 文本框 文本框 文本框 字符串 等于 获取哈希码 获取类型

请注意“TextBoxFor”不存在(因此出现错误)。

我在 csproj 中引用了 MVC:

<Reference Include="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>True</SpecificVersion>
  <HintPath>References\System.Web.Mvc.dll</HintPath>
  <Private>True</Private>
</Reference>

根据用户 Levi 的建议,我上传并运行了 MvcFutures 的诊断页面 - 这是看起来很无辜的输出:

Microsoft ASP.NET MVC 诊断信息 此页面旨在帮助诊断与不匹配或冲突的 ASP.NET MVC 二进制文件相关的常见错误。如果发现已知问题,它将在下方以红色文本显示。 有关 ASP.NET MVC 或此实用程序的问题或问题,请访问位于 http://forums.asp.net/1146.aspx 的 ASP.NET MVC 论坛。 环境信息 操作系统:Microsoft Windows NT 6.0.6002 Service Pack 2 .NET Framework 版本:4.0.30319.1(32 位) 网络服务器:Microsoft-IIS/7.0 集成管道:真 工作进程:w3wp.exe ASP.NET MVC 程序集信息 (System.Web.Mvc.dll) 程序集版本:ASP.NET MVC 2 RTM (2.0.50217.0) 全名:System.Web.Mvc,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35 代码库:file:///C:/Windows/assembly/GAC_MSIL/System.Web.Mvc/2.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll 部署:GAC 部署 ASP.NET MVC 期货程序集信息 (Microsoft.Web.Mvc.dll) 尚未将 ASP.NET MVC Futures 程序集加载到此应用程序中。如果需要,您可以从 http://go.microsoft.com/fwlink/?LinkID=183739 下载 ASP.NET MVC 2 RTM Futures。 所有加载的程序集 加载了 50 个程序集。 * A_d509bf65_3d32_48f0_8ab6_566e289003a6,版本=0.0.0.0,文化=中性,PublicKeyToken=null * 匿名托管 DynamicMethods 程序集,版本=0.0.0.0,文化=中性,PublicKeyToken=null * App_global.asax.5qqlf9ir,版本=0.0.0.0,文化=中性,PublicKeyToken=null * App_Web_2vnklzay,版本=0.0.0.0,文化=中性,PublicKeyToken=null * App_Web_n3cjbc0f,版本=0.0.0.0,文化=中性,PublicKeyToken=null * App_Web_v3sxbd4u,版本=0.0.0.0,文化=中性,PublicKeyToken=null * DotNetPanel.IIsModules,版本=1.0.0.0,文化=中性,PublicKeyToken=37f9c58a0aa32ff0 * Microsoft.Build.Framework,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * Microsoft.Build.Utilities.v4.0,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * Microsoft.CSharp,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * Microsoft.JScript,版本=10.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * mscorlib,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * SMDiagnostics,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * 系统,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Activities,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.ComponentModel.DataAnnotations,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Configuration,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * System.Core,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Data,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Data.DataSetExtensions,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Data.Entity,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Data.Services.Design,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Design,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * System.Drawing,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * System.EnterpriseServices,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * System.IdentityModel,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Numerics,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Runtime.Caching,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * System.Runtime.DurableInstancing,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Runtime.Serialization,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.ServiceModel,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.ServiceModel.Activation,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.ServiceModel.Activities,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.ServiceModel.Web,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Transactions,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Web,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * System.Web.Abstractions,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Web.ApplicationServices,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Web.DynamicData,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Web.Extensions,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Web.Mobile,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * System.Web.Mvc,版本=2.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Web.RegularExpressions,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * System.Web.Routing,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Web.Services,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a * System.WorkflowServices,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Xaml.Hosting,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 * System.Xml,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * System.Xml.Linq,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089 * TheActivityTracker,版本=1.0.0.0,文化=中性,PublicKeyToken=null 诊断版本:02/16/2010 00:00:00 v7 报告生成时间:2010 年 5 月 5 日 18:12:56

我只是想不出下一步该做什么。想法?

谢谢!

-迈克

【问题讨论】:

  • 这个老问题,坦率地说,现在已经无关紧要了。他们不能搬到档案馆吗?还是关门了??它没有答案。污泥堵塞管道

标签: asp.net-mvc


【解决方案1】:

您的托管商正在运行 MVC 2 的预发布版本。(更糟糕的是,他们似乎已经 GAC 了!)他们也可能正在运行 .NET 4 框架的预发布版本。

打电话给他们并告诉他们升级到 RTM 版本。 :)

【讨论】:

  • 或引用 System.Web.Mvc 引用的本地副本。可能比与主人打交道更容易。
  • 您将很难引用 System.Web.Mvc 的本地副本,因为 GACed 版本将始终胜过本地副本。我想您可以尝试获取 MVC 源代码并使用不同的版本号重新编译它。无论如何,您确实应该联系主机并让他们修复它。 MVC 2 RTM 二进制文件在您的主机可能正在运行的 .NET 4 Framework 的某些预发布版本上不稳定。
  • 我接受了您的建议,他们完成了重新安装(问题中的更新输出),现在版本号匹配 - 但问题仍然存在......?
  • 加载的 MVC 二进制文件可能仍存在多个冲突副本。请按照bradwilson.typepad.com/blog/2010/03/… 的说明进行操作,并使用该特定诊断工具的输出更新您的问题。将 .aspx 文件放到您的应用程序中,重现错误,然后直接浏览到 .aspx 文件(它只是一个常规的 WebForms 页面)。完成后记得删除 .aspx。
  • 已添加诊断数据。据我所知,看起来很无辜。 MVC RTM 似乎存在。谢谢你的建议!
【解决方案2】:

尝试删除提示路径和特定版本

<Reference 
Include="System.Web.Mvc, Version=2.0.0.0, 
Culture=neutral, 
PublicKeyToken=31bf3856ad364e35, 
processorArchitecture=MSIL" />

【讨论】:

    猜你喜欢
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2011-02-12
    • 2015-02-14
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    相关资源
    最近更新 更多