现在是要做某个系统的插件,这个宿主系统引用了“Microsoft.ApplicationBlocks.Data.dll”,这个类库与微软提供的那个在类名和命名空间上完全相同,但具体代码有修改,并加了强名称签名。   为了实现插件的逻辑,需要使用另外一个类库,这个类库引用了微软提供的那个标准的“Microsoft.ApplicationBlocks.Data.dll”。   现在的问题是,这个两个类库名字相同,但互相不能替代,该如何部署呢?或是有其他的解决方法??   清各位大侠帮忙,如果嫌分数少可再开帖给分,谢谢?

解决方案 »

  1.   

    使用外部别名,参考
    http://www.cnblogs.com/hunts/archive/2007/01/12/619008.html
      

  2.   


    只要有下列任何一个不同,程序集怎么会名称相同呢? 你不是做强名称签名了吗?
    1、简单名称
    2、版本号
    3、强名称签名 
    4、支持的文化具体如何用extern alias,参考3楼GTX280朋友提供的链接。
      

  3.   


    好像您也没有看清楚我的问题
    1.这两个重名的DLL都不是我创建的,所以我控制不了程序集的文件名,而且只有其中一个有强名称签名。
    2.这两个DLL在我写的插件代码里面都没有引用的,所以根本涉及不到别名的问题。
    3.现在的问题是宿主系统和我使用的类库都引用了文件名相同,但内容不同的两个程序集,在发布的时候我没有办法使这两个程序集共存在同一个文件夹下,因为文件名字相同,如何解决呢?
      

  4.   

    其中一个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
      

  5.   


    这个方法试过,不过不行,宿主程序好像有限加载宿主应用目录下的那个DLL,而忽略另外指定的 privatePath 下的DLL,还有其他可能的思路吗?
      

  6.   

    问题已解决,谢谢各位,办法就是将强名称签名的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>