【发布时间】:2011-04-05 06:23:43
【问题描述】:
我有几个 dll 文件,我想用命名空间分隔的方法导出所有公共类(导出到 html/文本文件或其他任何我可以在 Windows 中按 ctrl+c/v 的文件:)。
我不想创建文档或将我的 dll 与 xml 文件合并。我只需要所有公共方法和属性的列表。
实现这一目标的最佳方法是什么?
TIA 提供任何答案
【问题讨论】:
-
纯文本文件或任何我能做的复制粘贴:>
我有几个 dll 文件,我想用命名空间分隔的方法导出所有公共类(导出到 html/文本文件或其他任何我可以在 Windows 中按 ctrl+c/v 的文件:)。
我不想创建文档或将我的 dll 与 xml 文件合并。我只需要所有公共方法和属性的列表。
实现这一目标的最佳方法是什么?
TIA 提供任何答案
【问题讨论】:
边缘非常粗糙,但试试这个尺寸:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace GetMethodsFromPublicTypes
{
class Program
{
static void Main(string[] args)
{
var assemblyName = @"FullPathAndFilenameOfAssembly";
var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyName);
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
var methodsForType = from type in assembly.GetTypes()
where type.IsPublic
select new
{
Type = type,
Methods = type.GetMethods().Where(m => m.IsPublic)
};
foreach (var type in methodsForType)
{
Console.WriteLine(type.Type.FullName);
foreach (var method in type.Methods)
{
Console.WriteLine(" ==> {0}", method.Name);
}
}
}
static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
var a = Assembly.ReflectionOnlyLoad(args.Name);
return a;
}
}
}
注意:这需要改进以排除属性 getter/setter 和继承方法,但这是一个不错的起点
【讨论】:
您是否看过 RedGate 软件中的 .NET Reflector。它具有导出功能。
【讨论】:
您可以从这里开始Assembly.GetExportedTypes()
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getexportedtypes.aspx
【讨论】: