none
关于CLR自动搜索程序集问题 RRS feed

  • 问题

  • 大家好:

    关于.NET程序集加载有一系列细致的问题,想请教大伙儿:

    【一】程序集(类库)到底是“输出到本地”还是“指定绝对路径”?

     一般而言,默认VS把程序集拷贝到本地,意味着你可以随时运行引用这些程序集的类库。但是这样的坏处在于如果你的原有引用位置找不到了,而这个项目又是大家开发的(假设你原先引用的程序集位置为E:\bin\下,你实际项目在G:\Project中,选择“拷贝到本地”,项目完全可以运行)。但是你把G的Project打包或者通过某种途径分发给其他开发者他们是无法正常运行程序(因为原有E:\bin\不一定存在)。所以是不是不应该设置“拷贝到本地”,而是在Project下创建一个目录专门存放编译好的类库为好。或者说说两者的优势和劣势。

    【二】GAC(全局程序集缓存):是不是用了这个以后项目就可以直接绝对引用里边已经注册的DLL无需拷贝到本地了?

    【三】http://book.51cto.com/art/201012/237175.htm中有“使用LIB环境变量指定的任何目录。”,什么意思?

    谢谢各位。


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2014年3月7日 5:02
    版主

答案

  • Hi, dotnet程序会在启动目录和GAC搜索引用的程序集,然后,如果你在AppDomain里面指定了其他路径(用AppDomain.CurrentDomain.AppendPrivatePath指定,虽然此方法被标注为Obsolete,但还是可以使用),dotnet程序也会去指定路径搜索。

    程序集安装部署到GAC后,可以不用选择“输出到本地”也能正常引用。

    但是你所遇到的问题不一定是引用路径的问题,有可能是VisualStudio没有把所有应该引用的程序集拷贝到你的project的bin目录下。

    比如说,你引用了E:\bin下面的某个DLL(1),而该DLL(1)又引用了其他的DLL(2),这样在编译时,DLL(2)不一定能正确拷贝到你的project的bin目录下,特别是如果DLL(2)不是dotnet程序集时,一般都不能正确拷贝。

    2014年3月7日 12:39