关于程序集版本冲突问题,请高手帮忙,在线===================

LiuYongSheng 2008-12-29 05:51:59
现在是要做某个系统的插件,这个宿主系统引用了“Microsoft.ApplicationBlocks.Data.dll”,这个类库与微软提供的那个在类名和命名空间上完全相同,但具体代码有修改,并加了强名称签名。

为了实现插件的逻辑,需要使用另外一个类库,这个类库引用了微软提供的那个标准的“Microsoft.ApplicationBlocks.Data.dll”。

现在的问题是,这个两个类库名字相同,但互相不能替代,该如何部署呢?或是有其他的解决方法??

清各位大侠帮忙,如果嫌分数少可再开帖给分,谢谢?
...全文
148 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
david_anwei 2008-12-30
  • 打赏
  • 举报
回复
的确是个问题,不是那么好处理啊 !
EveryCase 2008-12-30
  • 打赏
  • 举报
回复
LiuYongSheng 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gomoku 的回复:]
引用 5 楼 LiuYongSheng 的回复:
引用 3 楼 GTX280 的回复:
使用外部别名,参考
http://www.cnblogs.com/hunts/archive/2007/01/12/619008.html


你好像没有看清楚我的问题,我写的代码当然可以使用别名引用名称冲突的类,但这里说的不是这个。问题是两个相同名称的程序集怎么能运行在同一个应用程序中呢?


只要有下列任何一个不同,程序集怎么会名称相同呢? 你不是做强名称签名了吗?
1、简单名称
2、版本…
[/Quote]

好像您也没有看清楚我的问题
1.这两个重名的DLL都不是我创建的,所以我控制不了程序集的文件名,而且只有其中一个有强名称签名。
2.这两个DLL在我写的插件代码里面都没有引用的,所以根本涉及不到别名的问题。
3.现在的问题是宿主系统和我使用的类库都引用了文件名相同,但内容不同的两个程序集,在发布的时候我没有办法使这两个程序集共存在同一个文件夹下,因为文件名字相同,如何解决呢?
LiuYongSheng 2008-12-30
  • 打赏
  • 举报
回复
问题已解决,谢谢各位,办法就是将强名称签名的DLL重命名,然后在 app.config 指定新名称即可。

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.ApplicationBlocks.Data"
publicKeyToken="B7131CACA45CCF9D"
culture="neutral" />
<codeBase version="5.1.2.0" href="Microsoft.ApplicationBlocks.Data.Host.dll"/>
</dependentAssembly>
</runtime>
LiuYongSheng 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 gomoku 的回复:]
其中一个dll可以放到某个子目录去,用配置文件来自定义寻找程序集的位置:

XML code
<?xml version="1.0" ?>
<configuration xmlns="urn:schemas-microsoft-com:asm.v1">
<runtime>
<assemblyBinding>
<probing privatePath="shared;myfolder" />
</assemblyBinding>
</runtime>
</configuration>



MSDN中的How the Runtime Locates Assemblies
[/Quote]

这个方法试过,不过不行,宿主程序好像有限加载宿主应用目录下的那个DLL,而忽略另外指定的 privatePath 下的DLL,还有其他可能的思路吗?
gomoku 2008-12-30
  • 打赏
  • 举报
回复
其中一个dll可以放到某个子目录去,用配置文件来自定义寻找程序集的位置:

<?xml version="1.0" ?>
<configuration xmlns="urn:schemas-microsoft-com:asm.v1">
<runtime>
<assemblyBinding>
<probing privatePath="shared;myfolder" />
</assemblyBinding>
</runtime>
</configuration>


MSDN中的How the Runtime Locates Assemblies

zw1724 2008-12-30
  • 打赏
  • 举报
回复
mark
gomoku 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 LiuYongSheng 的回复:]
引用 3 楼 GTX280 的回复:
使用外部别名,参考
http://www.cnblogs.com/hunts/archive/2007/01/12/619008.html


你好像没有看清楚我的问题,我写的代码当然可以使用别名引用名称冲突的类,但这里说的不是这个。问题是两个相同名称的程序集怎么能运行在同一个应用程序中呢?
[/Quote]

只要有下列任何一个不同,程序集怎么会名称相同呢? 你不是做强名称签名了吗?
1、简单名称
2、版本号
3、强名称签名
4、支持的文化

具体如何用extern alias,参考3楼GTX280朋友提供的链接。



LiuYongSheng 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 GTX280 的回复:]
使用外部别名,参考
http://www.cnblogs.com/hunts/archive/2007/01/12/619008.html
[/Quote]

你好像没有看清楚我的问题,我写的代码当然可以使用别名引用名称冲突的类,但这里说的不是这个。问题是两个相同名称的程序集怎么能运行在同一个应用程序中呢?
aisini_an 2008-12-29
  • 打赏
  • 举报
回复
学习!
GTX280 2008-12-29
  • 打赏
  • 举报
回复
LiuYongSheng 2008-12-29
  • 打赏
  • 举报
回复
谢谢,等高手现身
suxiangwp 2008-12-29
  • 打赏
  • 举报
回复
...
等答案

110,536

社区成员

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

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

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