2013-06-19 47 views
1

在Visual Studio中使用对象浏览器我试图找到一种方法来捕获便携式库中主机的默认代理设置。VS2012对象浏览器显示我无法访问的成员

这是一个远射,我知道。并非所有的平台都会有这样的概念,所以这样的API可能不存在于可移植的库中,但是我不明白为什么对象浏览器显示静态属性WebRequest.DefaultWebProxy,因为我不能在代码中使用它,不在那里。

My Object Browser

你可以看到我已经限制了搜索到的.NET可移植的子集。

我误解了什么?

回答

2

当您在列表中选择一个组件,然后你可以看到它来自哪里:

C:\ Program Files文件(x86)的\参考大会\微软\ Framework.NETPortable \ V4.5

这是PCL参考部件的“主目录”。但这不是降压的地方。配置文件和v4.0 \ Profile目录中有大量子目录,其目录的名称类似于“Profilexxx”,其中xxx是数字。它们包含替代引用程序集,其中包含创建项目时选择的特定目标集合中的可用类。实际上,他们将删除您选择的其中一个目标不支持的类。

对象浏览器中的缺陷是它不知道这些替代品,也不知道您选择了哪个特定配置文件。它只能看到主目录中的引用程序集。大概是VS源代码中某处的TODO。

2

实际上可以隐藏IntelliSense中的类和结构成员。这并不意味着它不存在,智能感知只是不会显示它。我见过一些BCL类成员没有出现在IntelliSense中。

如果你知道它存在,你可以使用它。你不应该在该属性或方法下得到一个红色的波形曲线(除非你错误地使用它)。

看看EditorBrowsableAttribute文档。还有一个BrowsableAttribute,用于确定在使用可视化设计器时是否在控件的属性网格中显示属性。

更新:由于具体的静态属性,我上面写的是无关紧要的。我像你一样进行搜索。问题是WebRequest对象不在可移植库的System.dll中。相反,这个对象驻留在System.Net.Requests.dll程序集中。命名空间仍然是相同的— System.Net。尝试添加对System.Net.Requests.dll的引用。

当使用对象浏览器并执行搜索时,请选择您感兴趣的成员。然后,单击搜索栏旁边带有红色“X”的按钮。这将清除搜索结果列表,但您之前选择的成员仍将被选中。然后,您将能够看到成员在BCL中的位置(或者,对于您的情况,可移植类库)。执行这些步骤时,您可以看到该成员位于名称空间System.NetWebRequest类中,但它位于System.Net.Requests程序集中。

+0

关于你的第一点,虽然有趣(个人,我知道这个属性),你可以选择在这个工具中显示隐藏的成员。然而,它会解释一些其他成员的这种情况,所以在技术上它的准确性为+1。 –

0

我不清楚它是否导致您的问题,但VS2012对象浏览器似乎有一个错误,在某些情况下,可能会导致它显示实际上不存在的属性。如果您有一个包含两个项目的解决方案,每个解决方案都具有对同一完全限定类的不同定义的引用,则会发生这种情况。

例子:

我使用ASP网格第三方库(DevExpress的)。

在项目A,I具有DevExpress.Data.v9.1.Linq.dll限定 DevExpress.Data.Linq.LinqServerModeDataSourceSelectEventArgs 2个公共属性,QueryableSource和KeyExpression。

在项目B,在同一溶液中我有DevExpress.Web.v11.2.dll限定 DevExpress.Data.Linq.LinqServerModeDataSourceSelectEventArgs用3个公共属性,QueryableSource和KeyExpression,和DefaultSorting

如果我打开一个解决方案,其中包含项目A和B,并打开ObjectBrowser来检查DevExpress.Data.v9.1.Linq.dll,它显示公共属性DefaultSorting是此类的成员(当真的这属性不存在于v9.1 dll中)。如果您尝试在代码中使用此属性,您将收到编译器错误,该类“不包含'DefaultSorting'的定义”

如果我打开一个不同的解决方案,其中只包含项目A 而不包含项目B,然后打开ObjectBrowser检查与上面相同的v9.1 dll,它正确显示缺少公共属性DefaultSorting。


如果这是上述的问题的原因,然后同时具有.NET便携式子集以及更宽的.NET框架打开并以相同的溶液中使用,可以触发这个ObjectBrowser错误。 这可能会导致VS2012向您显示仅属于完整框架一部分的属性,即使您正在使用对象浏览器来检查便携式子集。

相关问题