代码改变世界

解决AjaxControlToolkit在GAC添加后,在“添加引用”和”选择工具箱“中不可见

2010-04-09 12:22  Capt.Liu  阅读(1984)  评论(1)    收藏  举报

分享到:

之前看过张子阳老师《Asp.Net Ajax 的两种基本开发模式》,当中谈到可以将AjaxControlToolkit.DLL部署到GAC(全局程序集缓存),但是按照步骤操作,在“添加引用”或者“工具箱”并未出现AjaxControlToolkit。后来搜索一下,发现即使已将程序集安装到全局程序集缓存 (GAC) 中,“添加引用”对话框也不会自动显示每个程序集。因为“添加引用”对话框基于路径或还要求添加注册表项,该项指定要显示的程序集的位置。

同样在这篇文章http://www.cnblogs.com/ahjxxy/archive/2009/12/29/1635188.html,介绍了一种简便的方法,可以把你的DLL复制到.NET Framework目录(%WINDIR%\Microsoft.NET\Framework\v2.x.xxxx)中,这样的话.可以达到你的目的。但是,微软建议我们不应该将自己的assembly拷贝到Framework目录中。而是把它们放在一个单独的目录中,然后给Windows   Registry添加一个key,告诉VS2008在哪里可以找到这些assembly。不过本文还是使用前面提到的简便方法。

image

如上图,当我们在VS2008中建立一个工程以后,默认都会引入很多System下的namespace,例如System.Data.Linq,它的引用路径就不是在.NET Framework目录(%WINDIR%\Microsoft.NET\Framework\v2.x.xxxx)中,而是在C:\Program Files \Reference Assemblies\Microsoft\Framework\v3.5中,所以我们可以在“VS2008命令提示符”使用

gacutil -i C:AjaxControlToolkit.dll

添加到GAC后,再将AjaxControlToolkit.DLL拷到C:\Program Files \Reference Assemblies\Microsoft\Framework\v3.5中。

经过如上操作的话,重启Visual Studio 2008,你会发现在“添加引用”或者“工具箱”中能找到AjaxControlToolkit。

image

image

此外我们再使用AjaxControlToolkit时会发现智能提示中没有注释,这个其实很好解决,下载了AjaxControlToolkit源代码后,打开工程,然后在工程右击“属性”,在“生成”选项卡的“输出”中勾选上XML文档文件(这个即为源代码注释),如下图(最下方):

image

然后我们将AjaxControlToolkit.xml文件拷入C:\Program Files \Reference Assemblies\Microsoft\Framework\v3.5(AjaxControlToolkit.DLL文件所在位置),之后我们就能在智能提示中看到注释(当然无论是“对象浏览器”还是在方法或类上右击“转到定义”也是可见的),如图:

image

当然如果我们将AjaxControlToolkit添加到GAC后,在项目正常使用的话,还需要再web.config文件中进行一些配置

<system.web>
     <compilation debug="false">
         <assemblies>
             <add assembly="AjaxControlToolkit, Version=3.0.30930.28736, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e"/>
             <!- 其余略  -->
     </compilation>
</system.web>

如图:

image

其中Version,PublicKeyToken等属性值,我们可以打开C:\WINDOWS\assembly目录找到AjaxControlToolkit进行查看,或者打开“VS2008命令提示符”输入如下命令进行查看:

gacutil -l C:AjaxControlToolkit.dll

此外当我们安装完成后,使用这些控件时,当你向页面拖放一个控件,控件默认的前缀是 cc1,这样可能会显得不够美观,想解决这个问题,我们依然可以在web.config里面进行配置:

<system.web>
     <pages>
         <controls>
             <add assembly="AjaxControlToolkit, Version=3.0.30930.28736, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e"
namespace="AjaxControlToolkit" tagPrefix="ajaxControlToolkit" />
             <!-- 其余略  -->
         </controls>
     </pages>
<system.web>

非常感谢您的阅读,本人水平一般般,如有什么错误地方,非常欢迎批评指正,哈哈

 

参考文章:张子阳老师《Asp.Net Ajax 的两种基本开发模式》,http://www.cnblogs.com/jimmyzhang