C# 编译 dll 引用其他dll 的问题。

qinxiaolin 2008-03-17 02:48:13
我用C#编译一个a.dll 文件,a.dll文件又引用了第三方提供的b.dll文件。
应用程序app.exe(是一个web service)在调用 a.dll,图示说明如下:
app.exe——>a.dll ——>b.dll;
能不能将b.dll 彻底编译到a.dll里?这样当b.dll发生改变时,我只需要重新编译a.dll,而a.dll里的函数接口不变,
这样我的应用程序app.exe(web service),就不用重新编译发布了。
...全文
394 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinaterry 2008-03-19
  • 打赏
  • 举报
回复
^ō^

3.者同样是使用.Net开发的话...

可以将b.dll作为a.嵌入资源, 编译到a.dll中, 然后利用反射访问b.dll, 最后app.exe直接引用a.dll即可...
Matthewzhong 2008-03-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qinxiaolin 的回复:]
System.Reflection.Assembly ass = null;
ass = System.Reflection.Assembly.Load(资源);
Type[] types = ass.GetTypes();
for(int i = 0; i < types.length; i++) {
if(types[i].FullName.Equals("类名")) {
System.Reflection.MethodInfo method = types[i].GetMethod("方法名");
//调用方法
method.Invoke(ass.CreateInstance(types[i].FullName), new object[] {参数})
} …
[/Quote]
例如:
工程名为:Hello
导入资源名为:b.dll
ass = System.Reflection.Assembly.Load(Hello.Properties.Resources.b);
至于程序集的话可以通过断点查看types[i].FullName获得
liwei26102 2008-03-19
  • 打赏
  • 举报
回复
reflector
luxingchang_2008 2008-03-19
  • 打赏
  • 举报
回复
是不可以的!以前遇到这样的问题!
ProjectDD 2008-03-19
  • 打赏
  • 举报
回复
反射慢点,但把b.dll做为资源的加到a.dll的做法没有尝试过,呵呵又是一招啊.
lextm 2008-03-19
  • 打赏
  • 举报
回复
只要a.dll重新编译过,那么静态引用a.dll的app.exe就应该重新编译和发布。除非app.exe通过反射来调用a.dll。
journeydj 2008-03-19
  • 打赏
  • 举报
回复
个人感觉不行
bluedodo 2008-03-18
  • 打赏
  • 举报
回复
不在一个程序集里,不行
qinxiaolin 2008-03-17
  • 打赏
  • 举报
回复
System.Reflection.Assembly ass = null;
ass = System.Reflection.Assembly.Load(资源);
Type[] types = ass.GetTypes();
for(int i = 0; i < types.length; i++) {
if(types[i].FullName.Equals("类名")) {
System.Reflection.MethodInfo method = types[i].GetMethod("方法名");
//调用方法
method.Invoke(ass.CreateInstance(types[i].FullName), new object[] {参数})
}
}
[color=#FF0000]资源获取:
工程名.Properties.Resources.资源名 这句话是什么意思啊??

weiyong_zhao 2008-03-17
  • 打赏
  • 举报
回复
用reflector把b.dll反编译了,把它的代码copy到a.dll中。
一个不厚道的做法。
Matthewzhong 2008-03-17
  • 打赏
  • 举报
回复

System.Reflection.Assembly ass = null;
ass = System.Reflection.Assembly.Load(资源);
Type[] types = ass.GetTypes();
for(int i = 0; i < types.length; i++) {
if(types[i].FullName.Equals("类名")) {
System.Reflection.MethodInfo method = types[i].GetMethod("方法名");
//调用方法
method.Invoke(ass.CreateInstance(types[i].FullName), new object[] {参数})
}
}
资源获取:
工程名.Properties.Resources.资源名

.net 2005测试通过(VB库,C#调用)
miting1314520 2008-03-17
  • 打赏
  • 举报
回复
做不起,不过还是给你顶上去。
boblaw 2008-03-17
  • 打赏
  • 举报
回复
沒有源代碼,肯定不行

eagle0205 2008-03-17
  • 打赏
  • 举报
回复
把b.dll反编译了,然后代码放到a.dll的工程里去
boblaw 2008-03-17
  • 打赏
  • 举报
回复
應該是不行的
qinxiaolin 2008-03-17
  • 打赏
  • 举报
回复
可以,把b.dll当作资源编译在a工程中(相当于编译在a.dll里面,前提b.dll是.net工程)在a.dll中使用映射的方式调用b.dll资源



b.dll 是用VB写的, 对于如何把把b.dll当作资源编译在a工程中?有没有特殊的设置或操作步骤?
请说的清楚一点,在下是新手。
boblaw 2008-03-17
  • 打赏
  • 举报
回复
暈,不對哦。反射可以加載得到嗎?
boblaw 2008-03-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Matthewzhong 的回复:]
可以,把b.dll当作资源编译在a工程中(相当于编译在a.dll里面,前提b.dll是.net工程)在a.dll中使用映射的方式调用b.dll资源
[/Quote]

不過是叫反射。
Matthewzhong 2008-03-17
  • 打赏
  • 举报
回复
可以,把b.dll当作资源编译在a工程中(相当于编译在a.dll里面,前提b.dll是.net工程)在a.dll中使用映射的方式调用b.dll资源
boblaw 2008-03-17
  • 打赏
  • 举报
回复
樓上有眼光,哈
加载更多回复(3)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧