首页 新闻 会员 周边

WinForm和WinService如何公用相同dll,而不是将每个dll生成到各自项目中

0
悬赏园豆:50 [已解决问题] 解决于 2011-12-13 11:54

小弟学C#不久,最近在项目开发中遇到个问题,麻烦兄弟帮忙解决!

我们有个WinForm和WinService在同一个解决方案了,共同引用了许多一样的dll.但是打包生成安装程序,安装后每个dll都发布到每个项目中。

 

项目结构如下:

A

A\WinFormA

A\WinFormA\a.dll

A\WinFormA\b.dll

A\WinServiceA

A\WinServiceA\a.dll

A\WinServiceA\b.dll

 

感觉dll都重复了,升级等操作都比较麻烦,可不可以将公用的dll放到根目录A下或者根目录A下的一个子目录,供WinFormA和inServiceA调用?小弟之前是学Java的,不知道这样的想法是否可行?

c#
xrksudy的主页 xrksudy | 初学一级 | 园豆:65
提问于:2011-12-12 16:56
< >
分享
最佳答案
0
收获园豆:50
waninlezu | 小虾三级 |园豆:661 | 2011-12-12 17:10

谢谢,因为我们的程序是安装到客户那边,将DLL注册到GAC中不是很现实,也不是很方便!除了GAC这种方式,还有其他便于操作的方式吗?

xrksudy | 园豆:65 (初学一级) | 2011-12-12 17:29

@xrksudy: 

写个 脚本 注册 到 GAC 也不是 难事 啊。

如果你不愿意 

那提供 第二种办法:

添加 程序 的 ProbingPath

 

       ///<summary>
/// 添加 Dll 搜索路径
///<example>AppendProbingPath("bin", "lib")</example>
///</summary>
public static void AppendProbingPath(params string[] path)
{
#pragma warning disable 612,618
AppDomain.CurrentDomain.AppendPrivatePath(path.Join(';'));
#pragma warning restore 612,618
}


3. 修改 Config 文件 添加 ProbingPath

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="myapp/bin" />
</assemblyBinding>
</runtime>


这样 你可以 将  功用的 Dll 放进 Lib 文件夹中

将 ProbingPath 添加进去 就 OK 了,

关于 ProbingPath 剩下的 自己搜、

waninlezu | 园豆:661 (小虾三级) | 2011-12-12 17:36

@waninlezu: 非常感谢!

xrksudy | 园豆:65 (初学一级) | 2011-12-12 18:04

@waninlezu: 谢谢,我试了下,查询相关资料和自己测试了下,ProbingPath只能设置为本项目下的子目录,只能将公用dll构造成如下格式:

A

A\WinFormA

A\WinFormA\b\a.dll

A\WinFormA\b\b.dll

A\WinServiceA

A\WinServiceA\b\a.dll

A\WinServiceA\b\b.dll

 

但是要设置成这用格式就不行!

A

A\WinFormA

A\WinServiceA

A\b\a.dll

A\b\b.dll

能不能再帮忙解答下,谢谢!

xrksudy | 园豆:65 (初学一级) | 2011-12-12 22:28

@xrksudy: 

我说 大哥,你 注册到 GAC 不就 没事了 ,搞这么多 飞机。。

好吧。还有一种 方式。

订阅 AppDomain 的 AssemblyResolve 事件

 AppDomain.CurrentDomain.AssemblyResolve+=AssemblyLoading

这个 的 用法 是 当 jit 编译时 手动 加载 引用的 程序集,

你自己 查下 用法。

需要注意 要在 Jit 编译到 指定类型前 必须 将 程序集 载入 AppDomain,

这种方式 灵活性 较大,可以加载 任何 你能访问到的 程序集,如资源文件,网络,动态编译 等。

当然 也可以用来 解决你的问题。

waninlezu | 园豆:661 (小虾三级) | 2011-12-13 10:24

@waninlezu: 谢谢!

xrksudy | 园豆:65 (初学一级) | 2011-12-13 11:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册