1

私は、.Net 2.0 フレームワークを対象とした VS2010 で記述された VB.NET Web アプリケーション プロジェクトを持っています (知っているかどうかは聞かないでください)。私は言うインポートステートメントを持つクラスを持っています

Imports System.Web.HttpContext

下げて使ってみます

Current.Session("username") = "user"
Current.Session("psswd") = "psswd"
Current.Session("dbName") = "database"

If (IsNothing(Current.Session("username")) Or IsNothing(Current.Session("psswd")) Or IsNothing(Current.Session("dbName"))) Then
    Current.Response.StatusCode = 402
Else
      ' Do some stuff here
End if

私の個人用マシン (windows xp SP3) では問題なく動作しますが、サーバーでは壊れます。サーバー上でデバッグできないため、スタック トレースに依存してエラーを表示しています。

スタックトレースは私に与えます

[NullReferenceException: Object variable or With block variable not set.]
Microsoft.VisualBasic.CompilerServices.Container..ctor(Object Instance) +497860
Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack) +373
letter_main.Logon.login_user() in C:\VSProjects\letter_main\letter_main\Old_App_Code\Logon.vb:55
letter_main._Default.Page_Load(Object sender, EventArgs e) in C:\VSProjects\letter_main\letter_main\Default.aspx.vb:32
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +62

Logon.vb の 55 行目は、'Current.Response.StatusCode = 402' という行であり、セッションに値を入れることができた場合、この行に到達することはありません。私はそれがなかったと思いますか?

そのため、両方のマシンで System.Web.dll を調査したところ、両方が C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web の場所から c:\%WINDIR%\assemblies に登録されていることがわかりました。 .dll ですが、ローカル マシンとは異なるバージョンがサーバー上にありました

サーバーのバージョン: 2.0.50727.3053 私のマシンのバージョン: 2.0.50727.3614

これが私の問題の原因でしょうか?トラブルシューティングの良い方法を思いつく人はいますか? サーバーは Windows 2003 ですが、System.Web.dll をコピーして regasm を使用してローカル マシンでテストできるかどうかわかりません。必要な他の Web アプリが実行されているため、サーバー バージョンを置き換えることはできません。

4

2 に答える 2

1

あなたの問題はDLLのバージョンとは何の関係もないと思います。Importsステートメントの使用方法で何かが正しく機能していないと思います。クラスではなく、名前空間のみをインポートするのが一般的な方法です。例外メッセージにWithブロックが記載されているため(名前空間ではなくクラスをインポートすると、ブロックが実行しているのと同様のアクションを実行しますwith)、それが問題の原因であると思います。

これを試してください:インポートを単純に変更しますImports System.Web。次に、セッションをとして参照しHttpContext.Current.Sessionます。

これにより、それが問題であるかどうかがわかります。サーバーではなくローカルマシンで正常に動作する理由提案はありません。しかし、それが問題の原因であるかどうかを確認することから始めて、そこからそれに焦点を当てます...

于 2013-02-20T02:13:56.573 に答える
0

これの将来の読者にとって、私の問題はかなり奇妙であることが判明しました。私のクラスでは、Session オブジェクトからまったく取得できませんでした。ただし、コードビハインド ページでは問題なく動作しました。新しいプロジェクトを開始し、そこにコードを手動でコピーしたところ、問題なく動作し始めました。ウェブサイトからウェブアプリへの変換を間違えたからだと思います。根本的な原因が何であったかはわかりません...

于 2013-03-01T20:40:27.393 に答える