2011-06-22 7 views
3

既存の.NET 4コードを修正して、null可能な整数で構成される新しいプロパティを作成しました。それはWindowsサービスで動作します。null可能な整数をプロパティにする際に問題が発生するのはなぜですか?

public static int? Port 
    { 
     get; 
     set; 
    } 

コンセプトは、値がnullだった場合、それは無視されましたが、それは、その後でなかった場合、それが使用されたということでした(デフォルト以外のシナリオ)私のマシン上で

if (Port != null) 
    { 
     client = new Client(Server, Port.Value); 
    } 
    else 
    { 
     client = new Client(Server); 
    } 

、それはのように動作します期待される。

しかし、テストサーバーにデプロイすると、ASP.NETサイトから呼び出されたときに例外が発生します。

Exception: System.MissingMethodException 
Exception Message: Method not found: 'Void NameOfAssembly.set_Port(System.Nullable`1<Int32>)'. 
Exception Data: System.Collections.ListDictionaryInternal 
Exception TargetSite: ** Unable to GetValue ** 
Exception HelpLink: NULL 

それはコードが正しく展開されていなかったのどちらかかのようだ、またはそれだけで自動取得/設定メソッドを見つけることができません。ここでフォーマットされた例外出力です。同僚は私たちのテスト環境で動作するその後の変更を行ったので、それは配備の問題ではないと思います。

Windows Server(2008 R2)が私が開発したWindows 7とは異なる方法で動作する可能性を除いて、何らかの理由が考えられませんでしたが、それはストレッチです。

誰もこれまでにこれまで見たことがありますか?

答えて

-1

私は(Port.HasValue)場合に使用すべきだと思うの代わりに、(ポート!= null)の場合は

+6

しかし、私はそれが本当の問題だとは思わない。 –

+4

True;これはもっとスタイルの問題です。 'Port!= null'を使うことは完全に合法です。 –

+3

-1。このスタイルには何も問題はありませんが(またはnullと比較すると、どちらも同じコードにコンパイルされます)、これは全く問題にはなりません。 –

5

ASP.NETサイトが何らかの形であなたのアセンブリの古いバージョンを使用するように聞こえます。このエラーが(.aspxページではなく)コンパイルされたコードで発生した場合は、アセンブリの更新バージョンに対してコンパイルした可能性がありますが、更新されたアセンブリを含めずに展開した可能性があります。

+0

私はたぶんフレーズはうまくいかなかったかもしれませんが、問題のコードはASP.NETページから呼び出されたWindowsサービスにあります。そして、他の誰かからのコードへのその後の変更がうまくいくので、私はそれは古いアセンブリの問題だと思っていませんが、私はそれを排除していません。 –

+0

ASP.NETページはどのようにサービスを呼び出しますか?サービスまたはページでエラーが発生していますか? –

+0

@Aasmund:サービスでは、例外はASP.NETページまでバブルし、そこでログに記録されます。 –

0

@Aasmundは、おそらく古いアセンブリであると言います。あなたはそれがWindowsサービスにあると言いますが、展開後にサービスを再起動しましたか?

+0

はい、サービスは停止、展開、再起動されます。そしてその後の変更が行われるので、コードは展開されていると思うが、クロス配線されている可能性を超えているわけではない。 –

1

私はリフレクターでアセンブリを開き、は本当にであることを確認してください。

関連する問題