如何在解决方案中获取具有给定类的完整命名空间的程序集名称和类名?
我正在使用WPF,并且经常需要获取给定类的名称空间和程序集名称。 但我不知道该怎么做。
那么,如何在解决方案资源管理器中浏览类时和/和编辑类的代码时获取名称? 请帮忙!
您可以使用Visual Studio 立即窗口作为获取其中一个解决方案项目的程序集限定名称的快速方法。
IIRC,这些步骤应该有效:
- 打开要获取程序集名称的项目中包含的类的文件;
- 将该项目设置为解决方案的启动项目;
- 打开立即窗口 ,默认C#环境快捷键是CTRL + D + I ;
- 在立即窗口中键入
typeof(ClassNameOfStep1).AssemblyQualifiedName
并按Enter键 。
立即窗口依赖于设计时表达式评估,而后者依赖于Visual Studio托管过程,因此您需要启用它,默认情况下已经启用。
此外,我做了一些快速测试,除了我在VS 2008上尝试它时,类的名称在所有情况下都足够了,这要求我提供该类型的FullName
。 因此,如果Name
导致错误,请使用Name
命名空间。
这些应该给你你想要的东西:
var assemblyName = typeof(ClassNameGoesHere).AssemblyQualifiedName; var namespaceOfClass = typeof(ClassNameGoesHere).Namespace;
我看到你刚刚在你的问题中添加了一个关于“在解决方案资源管理器中浏览类时”的问题,简单的答案就是据我所知,你不能,因为那不是解决方案资源管理器所针对的(它在那里)用于浏览解决方案中的文件,而不是其中包含的内容),还因为:
- 一个文件可以包含多个类
- 通常,一个项目中的所有文件将始终编译为单个程序集,这使得显示每个文件的名称变得多余。
您可能想看看“类视图”是否为您提供了所需内容,但我怀疑它不会。
您可以使用F#interative,只需打开窗口(查看 – >其他Windows – > F#Interactive)并尝试以下操作:
> typedefof.Assembly.FullName;; val it : string = "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
像System一样自动引用一些程序集。 如果需要从另一个程序集中获取名称,则需要先添加引用(例如服务模型)。
> #r "System.ServiceModel.dll";; --> Referenced 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.ServiceModel.dll' > typedefof.Assembly.FullName;; val it : string = "System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
F#interative是Visual Studio 2010的一部分。
你需要Object Browser
。 按Ctrl + Alt + J.
在那里你会看到所有类型的元信息。