向各位高人请教一下:
     我用C#开发了一个WinForm的系统,该系统没有EXE文件,全部由dll构成,其中包括一个用C#开发的ActiveX控件。我需要通过另一个Delphi编写的程序访问本系统的ActiveX从而运行该系统,但是两个系统是完全独立发布和安装的。C#的系统采用了多国语言,语言包放在该系统所在路径下。
    我通过重新设置AppDomain.CurrentDomain的APP_BASE,解决了C#系统动态链接库的加载问题,现在的情况是:程序能够运行正常,但是却不能正确加载语言包。语言包的默认路径在主程序路径下,如果把语言包复制到Delphi程序所在路径下,语言包能够加载正常,但实际使用情况却不允许,也不可能这样做。
    向各位高人请教一下,.Net程序语言包的加载原理是怎样的?如何修改.Net程序语言包的加载路径?

解决方案 »

  1.   

    强调一下:Delphi的系统和C#的系统分别在不同的路径下。先谢了!!!!!!
      

  2.   

    你可以注册 AppDomain.AssemblyResolve 事件并处理它。该事件在应用程序域通过缺省方法加载组件集(包括语言组件集)失败时引发。处理该事件时,可通过 LoadAssembly 找到并加载你自己的语言组件集,并返回组件集的引用。
      

  3.   

    谢谢, SecretGarden,但是问题依然没有解决。加载语言资源包失败时,没有引发AssemblyResolve事件。另外,补充一下,我用的是.Net Frameworks2.0。
      

  4.   

    重新设置AppDomain.CurrentDomain的APP_BASE?
    App.config配置文件有一个privatePath 配置项,可以从任意路径加载程序集。
    还有个codebase 配置项目。
    不知道这些信息够不够?
      

  5.   

    你所说的语言资源包是独立的 dll 文件吗?
    不行的话再试试 AppDomain.ResourceResolve 事件。
      

  6.   

    你前面的描述说程序运行成功,但没有加载正确的语言包,这种情况下确实不会引发组件解析事件,因为你加载成功了,只不过是加载了错误的语言,你应该检查一下你的程序 AssemblyInfo.cs 里面的语言设置。
      

  7.   

    我的资源包为独立的dll文件。不光是我的资源包,还有用到的DevExpress控件的资源包。
    用 AppDomain.ResourceResolve事件也不行,完全没有反应。在AssemblyInfo.cs 里面指定为特定语言,也一样。
      

  8.   

    最麻烦的就是DevExpress控件,不可能去改它的程序吧。
      

  9.   

    DevExpress控件应该是包含了非特定资源集,因此找不到语言包dll时,不会发出异常