求教:在不加入gac的情况下,如何将程序的搜索目录设置为指定的绝对路径?

btman52 2013-04-24 09:29:49
目的:将共享程序集放在某目录(例如f:\library),以便多程序共享,将程序集加入gac是不可能的。
网上找了一段代码,作用是修改privatebinpath,但是有个缺点就是如果设置的目录在应用程序所在目录之外,则不会被加载。例如将d:\test\test.exe的privatebinpath设置为f:\library,则加载程序集不能成功。
查询msdn发现在applicationbase目录中的privatebinpath会被忽略,通过反射修改这个属性后依旧不能加载程序集,加载时依旧是filenotfound。
求有效地解决方法,万分感谢。
...全文
87 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheng2005 2013-04-25
  • 打赏
  • 举报
回复
引用 2 楼 btman52 的回复:
引用 1 楼 wddw1986 的回复:没有有效办法,除非你自己load。别浪费时间了。 自己load的话如果代码中有codedom那么动态编译返回的程序集会找不到引用程序集,这样有解决方法么?
程序集加载失败事件里面自己加载指定程序集,但是这有一些潜在问题,比如强命名。 总的来说,这么做不是很符合常规。因为程序目录外的程序集可以认为是不受控制的程序集,依赖于不受控制的程序集是一种比较危险的行为。所以才有了gac这个东西。也许,楼上所说,比较之后复制是更符合常规的做法。
  • 打赏
  • 举报
回复
实际上,假设你使用clickonce发布(vs下默认支持的发布技术)到http路径下,那么所有安装程序会放到任意一个web服务位置。然后客户端程序,每一次自动更新时仅仅会下载改变了的dll文件。 你完全没有必要自己去发明什么“共享”。浪费时间。
  • 打赏
  • 举报
回复
你可以换个思路。 例如: 一个程序比如说叫做 xx.exe,它可以仅仅是一个无窗口的Console程序,运行时比较一下当前目录下的dll是否是在你所谓的f:\library下最新的文件,如果不是就复制。然后,调用进程xx_app.exe,这才是你的有界面的程序。
btman52 2013-04-24
  • 打赏
  • 举报
回复
引用 1 楼 wddw1986 的回复:
没有有效办法,除非你自己load。别浪费时间了。
自己load的话如果代码中有codedom那么动态编译返回的程序集会找不到引用程序集,这样有解决方法么?
cheng2005 2013-04-24
  • 打赏
  • 举报
回复
没有有效办法,除非你自己load。别浪费时间了。

110,561

社区成员

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

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

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