7

次のコードは、str が NULL の場合に NULL 参照エラーを返しますが、開発サーバーやテスト サーバーではなく、運用サーバーでのみ発生します。

<div>
<input value="@Html.Raw(str)" />
</div>

これはうまくいきます:

<div>
<input value="@str" />
</div>

これと同じように:

<div>
Values is: @Html.Raw(str)
</div>

したがって、 @Html.Raw が NULL パラメータを受け入れられないという問題ではありません。ただし、その場合に正確に何が返されるかはわかりません。しかし、あるサーバーと別のサーバーではどういうわけか異なります。

どちらも同じバージョンの System.Web.Mvc を実行していますが、他の DLL を確認する必要があるかどうかはわかりません。クラッシュしている MVC メソッドを含む必要があるアセンブリである System.Web.WebPages は、両方のサーバーで同じバージョンです。これは MVC バージョン 4 です。.Net 4.5。

どうしてそんなことが可能なのですか?エラーは WriteAttributeTo メソッドで発生しますが、@Html.TextBoxFor ヘルパーではなく標準の HTML 入力タグを使用しているため、なぜここで呼び出されるのかさえわかりません。

編集 役に立つかもしれないことの 1 つは、他の人がそのコードを自分のビューに入れてみて、それが機能するか壊れるかを確認することです。少なくとも、予期しない動作をしているのが本番環境なのかテスト環境なのかはわかります。

完全なスタック トレースは次のとおりです。

System.Web.WebPages.WebPageExecutingBase.WriteAttributeTo (文字列 pageVirtualPath、TextWriter ライター、文字列名、PositionTagged 1 prefix, PositionTagged1 サフィックス、AttributeValue[] 値) で System.Web.WebPages.WebPageExecutingBase.WriteAttributeTo (TextWriter ライター、文字列名、PositionTagged 1 prefix, PositionTagged1 サフィックス、 System.Web.WebPages.WebPageExecutingBase.WriteAttribute (文字列名、PositionTagged) の AttributeValue[] 値)1 prefix, PositionTaggedc:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\fdd62ffd\90d151d1\App_Web_xsolwitr.2.cs: System.Web.WebPages.WebPageBase.ExecutePageHierarchy() の行 0 System.Web.WebPages.StartPage.ExecutePageHierarchy() の System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext) pageContext、TextWriter ライター、WebPageRenderingBase startPage) の System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) の System.Web.Mvc.ControllerActionInvoker.<>c_ DisplayClass1a.b _17() の System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (IResultFilter フィルター、ResultExecutingContext preContext、Func1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func1 継続) System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext、IList`1 フィルター、ActionResult actionResult) で System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c_ DisplayClass25.b _22(IAsyncResult asyncResult) で System. Web.Mvc.Controller.<>c_ DisplayClass1d.b _18(IAsyncResult asyncResult) は System.Web.Mvc.Async.AsyncResultWrapper に。<>c_ DisplayClass4.b _3(IAsyncResult ar) は System.Web.Mvc.Controller.EndExecuteCore() にIAsyncResult asyncResult) System.Web.Mvc.Async.AsyncResultWrapper.<>c_ DisplayClass4.b _3(IAsyncResult ar) at System.Web.Mvc.MvcHandler.<>c_ DisplayClass6 .<>c _DisplayClassb.b_4(IAsyncResult asyncResult) System.Web.Mvc.Async.AsyncResultWrapper.<>c _DisplayClass4.b__3(IAsyncResult ar) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()で.HttpApplication.ExecuteStep(IExecutionStep ステップ、ブール値 & completedSynchronously)

4

4 に答える 4

5

nemesv と Dave A の助けのおかげで、問題を突き止めることができました。2部回答です。

1)例外の理由は、 HTML属性内での結合のRazor実装にバグがあったためと思われます。Razor View Engineは、 HTML属性内のテキストに遭遇すると、プレーンなHTML内であってもメソッドを使用します。以前は、Razor View Engineはサーバー側のコマンド (シンボルの後のコード) のみを処理するという印象を受けていました。との両方でnull 値が許可されていましたが、2 つの組み合わせを処理するには特別な処理が必要であり、null 値があるとそのコードがクラッシュしていました。Html.RawWebPageExecutingBase.WriteAttributeTo()@Html.RawWriteAttibuteTo()

2)これはSystem.Web.WebPages.dllの最新リリースで更新/修正されており、回答の 2 番目の部分につながります。プロジェクトはその dll のVer 2.0.20505.0を参照し、プロジェクトの bin フォルダーにデプロイされていました。このバージョンにはバグが含まれています。

しかし、それがプロジェクトによって参照されていたとしても、bin フォルダーで、テスト サーバーはそのバージョンの DLL をアセンブリ バインディングに使用しませんでした。代わりにGACfuslog.exeに登録されたアセンブリをバインドしていたことが明らかになりました。これはVer 2.0.20710.0 でした。QA サーバーの GAC にはこれがありましたが、運用サーバーにはありませんでした。GACが bin フォルダーにある dll をオーバーライドすることを知りませんでした。

WebPages dllVer 2.0.30506.0を含む最新のASPNetMVCパッケージを参照するようにプロジェクトを更新しました。

于 2013-10-31T15:31:10.987 に答える
2

この小さなビルド番号の違いが実際に違いを生む可能性はありますか?

もちろん可能です。マイナー ビルドは通常、非破壊的な変更で構成されますが、それはバグを含めることができないという意味ではありません。問題が発生しているように見えるため、バージョンの不一致がおそらく問題の原因であるSystem.Web.WebPages.WebPageExecutingBaseと想定しても安全です。System.Web.dll

逆アセンブラーを介して両方の DLL を実行し、その領域内およびその周辺に明らかな変更があるかどうかを確認できます。


8 月に修正された属性で使用されている場合、テキストを正しくデコードしないことに関連する問題がありました。問題を修正した 2 つのバージョン間の変更であるかどうかはわかりません。Html.Raw

于 2013-10-29T22:13:39.417 に答える