虽然能够显示类型层次,但我无法方便的把显示出来的类型层次转换为文本形式。而且,Reflector在显示基类和派生类的时候都会使用类型的全名,但有时候我只需要看到类型的简单名字。我也找过另外几个工具,例如.NET Framework SDK以前自带的
没找到现成合用的工具,只好自己写一个了。于是就用C#/WinForms写了一个简单的GUI程序,只是用来显示类型层次信息,并且能把类型层次以文本形式复制到剪贴板。
===========================================================================
===========================================================================
1、在文本框中输入assembly的完整名称(Name,Version,Culture,PublicKeyToken),并按回车或点击“Load By Name”按钮;
////////////////////////////////////////////////////////////////
Name: ClassHierarchyViewer
Author: RednaxelaFX (Kris Mok,
[email protected])
Version: 0.3.0.1
Release Date: 2008-09-23
License: MIT style license. See License.txt.
////////////////////////////////////////////////////////////////
Description:
A simple tool that shows the class hierarchy within a given
.NET assembly.
Required Environment:
Windows XP or Vista, with .NET Framework 3.5 or above installed.
////////////////////////////////////////////////////////////////
Usage:
1. Start program from command line:
usage: ClassHierarchyViewer <assembly-path>
- or -
2. Start program from GUI:
Assemblies can be loaded by one of:
* enter the assembly's full name in the combobox, then click
"Load By Name" button;
* enter the assembly's full name in the combobox, and hit
Enter;
* Click "Open File..." button, and choose an assembly file;
* Drag and drop a assembly file from Explorer.
Only one assembly is active at a time.
A few commonly used BCL assemblies' names are added to the
combox already, including:
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.AddIn, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac
System.Net, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
////////////////////////////////////////////////////////////////
Functions:
The GUI window is divided into 3 major components:
1. Class List Window (on the left)
Displays all types (except "<Module>") in the given assembly,
grouped by their namespaces, sorted by the type's name.
Types that are not visible outside the assembly are marked gray.
2. Class Hierarchy Window (on the upper right)
When a type is selected in the Class List Window, its type
hierarchy will be shown in this window.
The hierarchy shown includes the type itself, its base type (up
to System.Object), and all its derived types.
Checking/unchecking the "Full Name" checkbox will cause this
window to reload, showing types with their simple name/full name.
Clicking "Copy to Clipboard" button will copy the type hierarchy
to the clipboard, in text representaion.
3. Class Member Window (on the lower right)
When a type is selected in the Class Hierarchy Window, its
members will be shown in this window. This does not include
a type's nested types.
Checking/unchecking the "Use Alias" checkbox will cause this
window to reload, showing types with their alias/name.
////////////////////////////////////////////////////////////////
Known Issues:
1. TreeViews flicker when mouse moves over them rapidly.
Haven't found any solution to this, maybe that's just how
WinForms behaves.
2. Copying the type hierarchy causes flickering.
This is because of the way data is loaded: derived types are
added onto the tree when a node is expanded. To make sure
derived types are added correctly, the whole tree is expanded
before its text representation can be gathered. This will be
improved in later versions with M-V-VM pattern.
3. Properties' getter and setter methods aren't associated with
the properties' nodes.
Due to the lack of developing time, certain useful functions
such as this one is not implemented yet. Will be fixed in
later versions.
4. Doesn't show what interfaces a type implements.
Same as above. Will be fixed.
5. Cannot load an assembly from GAC just by browsing in the open
file dialog.
I know. That's why there's an alternative, to load assemblies
with their full names. Later on I might add a dialog to select
assemblies from GAC.
////////////////////////////////////////////////////////////////
Note:
The icons used in this program originated from Microsoft Visual
Studio 2008's image libraries, Visual Studio Image Library:
24bit Objects and Objects (WinVista style, .png).
The MIT License
Copyright (c) 2008 RednaxelaFX (Kris Mok,
[email protected])
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
现在这个简陋的程序最大的限制就是无法自如的打开GAC里的assembly,因为在Windows上安装.NET Framework之后,GAC目录默认会被Fusion管理起来,需要通过修改注册表来禁用这个功能才能看到GAC里的assembly的路径。当然, 我可以扫描%WINDOWS%\Assembly\下的所有assembly,不过这个功能还没做进来;别的类似程序在扫描GAC时非常慢,所以我不太肯 定要不要把这个功能做进来。现在通过强名称一样能打开GAC里的assembly,只是用户会辛苦一点了。预先放在文本框的下拉列表里的名称应该能满足一 般使用需要了吧。