One Reflection application in .NET
原创
©著作权归作者所有:来自51CTO博客作者feishunji的原创作品,请联系作者获取转载授权,否则将追究法律责任
问题是这样的, 一个人想在发布自己项目的时候 不用发布它所引用的程序集.
我想 办法是这样的: 把程序集embed到自己的项目中再通过reflection机制来调用改程序集的方法啊 类啊 数据啊 什么的.
下面是一个例子.
-----------------ClassLibrary1.dll---------------------
namespace ClassLibrary1
{
public class Class1
{
public void Show()
{
Console.WriteLine("Class1.Show is called...");
}
}
把上面的dll加到下面的项目中来并且把Build Action 设成 Embeded Resources
------------------Console app------------------
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Assembly dll;
Assembly a = Assembly.GetExecutingAssembly();
byte[] buffer=new byte[40480];//大小因程序集而异
Stream stream = a.GetManifestResourceStream("ConsoleApplication1.ClassLibrary1.dll");
int j = stream.Read(buffer, 0, buffer.Length);
if (j > 0)
{
dll = Assembly.Load(buffer);
Type[] t = dll.GetTypes();
foreach (Type tt in t)
{
if (tt.Name == "Class1")
{
object class1= Activator.CreateInstance(tt);
MethodInfo[] ms = tt.GetMethods();
foreach (MethodInfo m in ms)
{
if (m.Name == "Show")
m.Invoke(class1, null);
}
}
} }
}
}
}
此方法因为要把整个assembly导入内存,所以 如果程序集太大显然就不行了...
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
One ASP.NET
大多数情况下,我是一名 ASP.NET开发人员。我不需要指定 MVC 或 Web Fo
asp.net mvc 二维码 -
Updater Application Block for .NET
IntroductionDo you need to deploy updates to .NET applications across multiple desktops? Would you like to develop "self-updating" applicatioor
application microsoft documentation deployment .net -
Microsoft Application Blocks for .NET 下载
Data Access Application Block 是一个 .NET 组件,包含优化的数据访问代码,可以帮助用户调用存储过程以及向 SQL Server 数据库发出
.net application microsoft library sql server -
.NET进阶篇-Reflection反射、Attribute特性
射来实现的。我们写业务代码可能很少去写反射,但理解反射是从菜鸟到大
Attribute特性/注解 Reflection反射 构造函数 字段 创建对象