C# 子IIS应用程序中的RegisterClientScriptResource NullReferenceException
我从.Net 4.5 Beta升级到RTM版本,现在当我有一个标准的WebForm页面,其中有一个通用标记时,我得到一个NullReferenceException,如下所示: [NullReferenceException:对象引用未设置为对象的实例。] System.Web.UI.WebControl.ValidatorCompatibilityHelper.RegisterClientScriptResource(控件控件,字符串resourceName)+180 System.Web.UI.WebControls.BaseValidator.OnPreRender(EventArgs e)+253 System.Web.UI.Control.PreRenderRecursiveInternal()+170 System.Web.UI.Control.PreRenderRecursiveInternal()+255 System.Web.UI.Control.PreRenderRecursiveInternal()+255 System.Web.UI.Control.PreRenderRecursiveInternal()+255 System.Web.UI.Control.PreRenderRecursiveInternal()+255 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+4047 我甚至创建了一个示例页面(没有母版页-只有下面的HTML),一旦添加了验证器,就会出现上面的错误。以下是它的HTML:C# 子IIS应用程序中的RegisterClientScriptResource NullReferenceException,c#,orchardcms,asp.net-4.5,C#,Orchardcms,Asp.net 4.5,我从.Net 4.5 Beta升级到RTM版本,现在当我有一个标准的WebForm页面,其中有一个通用标记时,我得到一个NullReferenceException,如下所示: [NullReferenceException:对象引用未设置为对象的实例。] System.Web.UI.WebControl.ValidatorCompatibilityHelper.RegisterClientScriptResource(控件控件,字符串resourceName)+180 System.Web.U
<form runat="server">
<asp:Textbox runat="server" ID="txTest" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txTest" />
</form>
此服务器上其他站点的其他页面工作正常,因此我怀疑这与它是IIS中的子应用程序以及父应用程序Orchard有关。有没有关于如何解决这个问题的建议?因为它只是一个标准标签,我甚至不知道从哪里开始寻找
编辑:我找出了它断裂的原因,不过我希望果园团队的人能澄清为什么会这样做。在默认配置中,有一个部分正在编译程序集,其中有许多已删除的程序集。我取出了整个列表,我的内部页面工作正常,所以我开始一次添加一个列表,当我为System.Web.Extensions添加删除条目时,列表崩溃了。我可以轻松地将它添加到我的儿童应用程序中,但我很好奇为什么它会被删除。下面是它的典型外观,我删除了System.Web.Extensions的条目以使我的子应用程序正常工作:
<compilation debug="false" targetFramework="4.0" batch="true" numRecompilesBeforeAppRestart="250" optimizeCompilations="true">
<buildProviders>
<add extension=".csproj" type="Orchard.Environment.Extensions.Compilers.CSharpExtensionBuildProviderShim" />
</buildProviders>
<assemblies>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<remove assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<remove assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<remove assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<remove assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<remove assembly="System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<remove assembly="System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove assembly="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove assembly="System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<remove assembly="System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<remove assembly="System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<remove assembly="System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<remove assembly="System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<remove assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<remove assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</assemblies>
</compilation>
在Orchard的web.config中,一些程序集被显式删除,因为Orchard本身不使用它们。如果需要,可以安全地重新启用它们。父应用程序是否运行相同版本的.NET?通常,子web.config会添加或替换父web.config中的内容,因此父web.config会严重影响子web.config。此外,子目录是应用程序还是虚拟目录?是的,在IIS中都配置为4.0,尽管它们是4.5。它被配置为一个应用程序,而不仅仅是一个虚拟目录?或者,如果您将它们都配置为4.5?我感觉4.5就像IIS中的3.5一样-我无法直接选择它。我唯一的选择是2.0和4.0。我确实尝试过在VS中将子项目更改为4.0,但是没有任何区别。这就是我解决这个问题的方法。为什么要这样做?是为了更好的性能还是..?选择加入总是为了更好的安全性和性能。不会让它更安全或更快,但肯定不会让它变得更糟。