HttpListenerRequest クラスを利用する .NET 3.5 を対象とする Visual Studio 2008 を使用して作成されたプロジェクトがあります。統計収集メカニズムの一部として、クラスのすべてのプロパティがファイルに書き込まれます。
最近、プロジェクトを VS2008 ソリューションから VS2010 ソリューションに変換しようとしましたが、変換中にエラーはまったく発生しませんでしたが、プロジェクトをビルドしようとするとすぐに、コンパイラは「HttpListenerRequest.ServiceName」が見つからないと主張し、 「HttpListenerRequest.TransportContext」。
これらのプロジェクトの両方で、ターゲット フレームワークは .NET Framework 3.5 です。参照されている DLL のバージョン番号を比較したところ、すべて同じように見えます。
Visual Studio の両方のバージョンで HttpListenerRequest クラスのメタデータを調べることにしました。2010 では期待どおりに ServiceName と TransportContext への参照がありませんが、VS2008 では両方のプロパティが表示されますが、概要の説明は表示されません。
次に、VS2010 で .NET 4 を対象とするプロジェクトを作成しました。これにより、上記の両方のプロパティを参照できます。
引き続き .NET 3.5 をターゲットにする必要があります。とにかく、コードを変更して多くの機能を除外することなく、これを機能させることができることをご存知ですか?
編集:要求どおり、これはコードです:
void Log(System.Net.HttpListenerContext context)
{
string line =
DateTime.Now.ToString() + "|" +
context.Request.HttpMethod + "|" +
context.Request.RawUrl + "|" +
context.Request.Url.ToString() + "|" +
context.Request.RemoteEndPoint.ToString() + "|" +
(context.Request.UrlReferrer == null ? "None" : context.Request.UrlReferrer.ToString()) + "|" +
(context.Request.ServiceName == null ? "None" : context.Request.ServiceName) + "|" + // Error Here on ServiceName
context.Request.UserHostName + "|" +
context.Request.UserAgent + "|" +
context.Request.TransportContext.ToString() + "|" + // Error here on TransportContext
context.Request.ProtocolVersion + "|" +
context.Request.ContentLength64.ToString();
WriteToFile(line);
}