1

古い ASP.NET WebForms プロジェクトを使用していますが、起動時に次のようになります。

長さは 0 未満または入力長を超えることはできません。パラメータ名: 長さ

困惑しているのは、私のアプリケーション コードがスタック トレースのどこにもないことです。表示される内容は次のとおりです。

[ArgumentOutOfRangeException: Length cannot be less than 0 or exceed input length.
Parameter name: length]
   System.Text.RegularExpressions.Regex.Run(Boolean quick, Int32 prevlen, String input, Int32 beginning, Int32 length, Int32 startat) +6697802
   System.Text.RegularExpressions.Regex.Match(String input, Int32 beginning, Int32 length) +48
   Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.LiteralWithCommentsHelper.FindComments(String source, Int32 sourceStart, Int32 sourceEnd) +89
   Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.LiteralWithCommentsHelper..ctor(String source, Int32 sourceStart, Int32 sourceEnd) +27
   Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.SelectionMappingParseRecorder.PostProcessBlockList() +311
   Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.SelectionMappingParseRecorder.BuildBlockList(ControlBuilder root) +100
   Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.SelectionMappingParseRecorder.ParseComplete(ControlBuilder root) +101
   System.Web.UI.ParseRecorderList.ParseComplete(ControlBuilder root) +71
   System.Web.UI.TemplateParser.HandlePostParse() +184
   System.Web.UI.TemplateControlParser.HandlePostParse() +13
   System.Web.UI.PageParser.HandlePostParse() +12
   System.Web.UI.TemplateParser.Parse() +154
   System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType() +110
   System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) +59
   System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() +209
   System.Web.Compilation.BuildProvidersCompiler.PerformBuild() +15
   System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) +9929933
   System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) +299
   System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) +103
   System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) +165
   System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) +43
   System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +31
   System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +64
   System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +191
   System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +145
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

私はこのプロジェクトを始めたばかりなので、何が変わったのかはわかりませんが、過去のある時点で機能していたことは知っています。:) ごく最近、プロジェクト ファイルを VS 2010 から VS 2012 にアップグレードしましたが、警告はスローされず、そのために発生するのは奇妙なことのようです。VB.NET で書かれた .NET 4.0 プロジェクトです。

どこを見ればよいか、またはこれをさらに診断する方法についてのアイデアはありますか?

4

3 に答える 3

1

たくさんの試行錯誤を経て、私はこれを理解したと思います。

原因は、aspxページに含まれるサーバーサイドインクルードです。

<!-- #include file="include/header.inc" -->

インクルードされたファイルにコードブロックが含まれている場合、つまり

<% Response.Write("Im broken") %>

上記の例外が発生します。インクルードされたファイルにプレーンテキスト/htmlのみが含まれている場合は、コードブロックが存在する場合にのみ正常に機能します。

これは、Visual Studio 2012にアップグレードする前に機能していたため、vs2012パーサーのバグのようです...

于 2012-09-28T17:03:44.153 に答える
1

つまり、これは Microsoft Page Inspector のバグのようです。Web サイトのデバッグ時に、Chrome/IE/Firefox の代わりに Page Inspector を使用するように VS2012 に指示できます。ただし、使用しないことを選択したときに Page Inspector が関与する理由はわかりませんが、存在します。私には、上記の呼び出しスタックと、HTML ドキュメントが途中でクリップされる原因の両方が発生しました。

私が見つけた最善の解決策は、web.config でアセンブリを削除して Page Inspector を無効にすることです。

<compilation defaultLanguage="c#" debug="true" targetFramework="4.0">
  <assemblies>
    <remove assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>
于 2012-11-29T09:34:59.107 に答える
0

私の最善の推測(そしてそれは単なる推測です)は、スタックトレースに表示されるモジュールに基づいています。

ビルドで何か複雑なことが起こっているか、ページに不正な形式のタグまたはコンパイラ指令があると思います。

プロジェクトファイルをチェックして、特別なビルドスクリプト、ビルドイベントなどがあるかどうかを確認します。

スタートアップページをデザイナにロードして、何が起こるかを確認してみてください。警告や情報メッセージはありますか?エラーのグリフはありますか?レッドライン?

于 2012-09-27T21:17:46.770 に答える