1

我有一个使用 .NET 3.5 的 Visual Studio 2008 创建的项目,它使用了 HttpListenerRequest 类。作为统计信息收集机制的一部分,类的所有属性都被写入文件。

我最近尝试将项目从 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);
}
4

1 回答 1

0

所以我想通了:

两个版本的 Visual Studio 只为我提供了 System.dll 的以下版本信息: v2.0.50727

但是在进入windows目录并检查文件后,存在版本差异。不包括这些属性的是版本v2.0.50727.3053,而版本v2.0.50727.3634包括它们。

我认为问题是我在安装 Windows 后禁用了 Windows 更新。

于 2012-11-15T13:40:53.900 回答