Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

把组件放入GAC后如何调用?

1 view
Skip to first unread message

潘兆勇

unread,
Jun 2, 2003, 5:30:25 AM6/2/03
to
我用VB.Net写了一个Web自定义控件,并给程序集分配了强名称和snk。把它安装到GAC
后,在c:\windows\assembly目录中可以看到我新添的程序集。但是我从vs.net开发环
境中为项目添加引用,但在“.net”页中却看不到我添加的程序集,请问我该如何引用
我加入到GAC的程序集?
谢谢!


Kefroth

unread,
Jun 2, 2003, 11:48:36 AM6/2/03
to
潘兆勇 你好,

在注册表中下面的节点中添加:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders

--
袁伟[MVP]


"潘兆勇" <fz...@163.com> 写入消息新闻
:eHnAemOK...@TK2MSFTNGP12.phx.gbl...
> 我用VB.Net写了一个Web自定义控件,并给程序集分配了强名称和snk。把它安装到
GAC
> 后,在c:\windows\assembly目录中可以看到我新添的程序集。但是我从vs.net开发

> 境中为项目添加引用,但在“.net”页中却看不到我添加的程序集,请问我该如何引

> 我加入到GAC的程序集?
> 谢谢!
>
>


小李菜刀

unread,
Jun 2, 2003, 8:48:44 PM6/2/03
to
您好,Kefroth:
呵呵,又学了一招。
在 2003-06-02 23:48:36 的来信中您写到:

--
小李菜刀 <caid...@hotmail.com>

Kefroth

unread,
Jun 2, 2003, 9:41:15 PM6/2/03
to
小李菜刀 你好,

我也是从别人那里学来的!:)

--
袁伟[MVP]


"小李菜刀" <caid...@hotmail.com> 写入消息新闻
:20030603084822...@hotmail.com...

潘兆勇

unread,
Jun 2, 2003, 10:26:49 PM6/2/03
to
非常感谢。已经解决了问题。
我现在遇到新的问题,还想请教您。
我使用VS.Net做了一个安装项目,使用了两种方法来将我的程序集部署到GAC。
1:把我的程序集dll文件部署到[ProgramFilesFolder][Manufacturer]\[ProductName]
目录下,并在注册表中添加了一个
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\AssemblyFolders\EStore\,
将默认值改为[ProgramFilesFolder][Manufacturer]\[ProductName]。编译并安装后,
在VS.Net的添加引用中没有看到我加入的程序集。
2:把我的程序集dll文件部署到Global Assembly Cache文件夹,安装,和上面的问题
一样。
顺便请教一下,用安装程序把程序集部署到GAC中,实际的dll文件路径是哪里?
谢谢!

"Kefroth" <kef...@interlap.com.ar> 写入消息
news:OxPCN8WK...@TK2MSFTNGP12.phx.gbl...

sam

unread,
Jun 3, 2003, 1:46:42 AM6/3/03
to
要将一个Assembly放入GAC中,此Assembly必须是具有strong name的。
GAC的具体位置是: Windows安装目录\assembly

应当使用Gacutil.exe来将Assembly安装到GAC中。

"潘兆勇" <fz...@163.com> wrote in message
news:%238zgdeX...@TK2MSFTNGP12.phx.gbl...

潘兆勇

unread,
Jun 3, 2003, 3:50:43 AM6/3/03
to
请问在安装程序中将组件部署在GAC中,采用什么方法最方便?
我参照MSDN中所说的,写了一个.bat文件,想在安装最后一步用gacutil工具将程序集
安装到GAC中,可是不知道如何让这个文件在安装后自动运行。好像没有什么类能把它
部署到GAC,查MSDN,有两种方法,一是使用MSI 2.0(但不知如何使用),二是使用
Gacutil.exe,不过自动部署好像用它不上。
另外,我也在安装程序中写了注册表项,但我也不知道如何让安装程序修改我添加注册
表项的“(默认)”键值。我自己添加“(默认)”键,并给它赋值,不过安装后在注册表
中不是修改它(默认)的那个键,而是新增一个名为(默认)的键。这样做我在VS.Net中添
加引用时看不见我加入到GAC中的组件,只能手动将系统(默认)键改为我的路径,再把
我添加的那个删除,这样才可以在VS.Net中看到我部署的组件。不知为什么。
Kefroth大侠快帮帮我啊!
谢谢了!

"Kefroth" <kef...@interlap.com.ar> 写入消息
news:e9YNKLTK...@TK2MSFTNGP12.phx.gbl...


> 潘兆勇 你好,
>
> 在注册表中下面的节点中添加:
>
> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders
>
> --
> 袁伟[MVP]
>
>
> "潘兆勇" <fz...@163.com> 写入消息新闻
> :eHnAemOK...@TK2MSFTNGP12.phx.gbl...
> > 我用VB.Net写了一个Web自定义控件,并给程序集分配了强名称和snk。把它安装到
> GAC
> > 后,在c:\windows\assembly目录中可以看到我新添的程序集。但是我从vs.net

> 环

Kefroth

unread,
Jun 3, 2003, 10:46:13 AM6/3/03
to
潘兆勇 你好,

你说的这些在安装部署中都很常见,用Windows Installer做到也很简单。

* 关于GAC:在File System Editor中有一个special folder就是GAC,你将Assembly放
到这个目录中就可以了。另外用bat在安装后执行得需要你写一个Installer Class,
override两个方法,Install和Uninstall,关于这些文档中有详细的示例。

* 关于Registry:在安装项目的Registry Editor中你可以对Windows Registry进行相
关的操作。下面是文档中的一些链接:

ms-help://MS.VSCC/MS.MSDNVS.2052/vsintro7/html/vbconDeploymentRegistry.htm

ms-help://MS.VSCC/MS.MSDNVS.2052/vsintro7/html/vbconDeploymentScenarios.htm

--
袁伟[MVP]


"潘兆勇" <fz...@163.com> 写入消息新闻
:ekBtaTaK...@TK2MSFTNGP12.phx.gbl...
> 请问在安装程序中将组件部署在GAC中,采用什么方法最方便?
> 我参照MSDN中所说的,写了一个.bat文件,想在安装最后一步用gacutil工具将程序

> 安装到GAC中,可是不知道如何让这个文件在安装后自动运行。好像没有什么类能把

潘兆勇

unread,
Jun 3, 2003, 11:31:51 PM6/3/03
to
非常感谢。:)

"Kefroth" <kef...@interlap.com.ar> 写入消息
news:uCETxPeK...@TK2MSFTNGP11.phx.gbl...

neon

unread,
Jun 4, 2003, 4:48:59 AM6/4/03
to
“在File System Editor中有一个special folder就是GAC”
是的,这是最方便的方法,我常用。

--
你在提问之前,有没有先到微软中文新闻组全文搜索里查一下?
http://www.microsoft.com/china/community/newsgroup/searchform.asp


"Kefroth" <kef...@interlap.com.ar> wrote in message
news:uCETxPeK...@TK2MSFTNGP11.phx.gbl...


> 潘兆勇 你好,
>
> 你说的这些在安装部署中都很常见,用Windows Installer做到也很简单。
>
> * 关于GAC:在File System Editor中有一个special folder就是GAC,你将Assembly

> 到这个目录中就可以了。另外用bat在安装后执行得需要你写一个Installer Class,
> override两个方法,Install和Uninstall,关于这些文档中有详细的示例。
>
> * 关于Registry:在安装项目的Registry Editor中你可以对Windows Registry进行

> 关的操作。下面是文档中的一些链接:
>
> ms-help://MS.VSCC/MS.MSDNVS.2052/vsintro7/html/vbconDeploymentRegistry.htm
>
>
ms-help://MS.VSCC/MS.MSDNVS.2052/vsintro7/html/vbconDeploymentScenarios.htm
>
> --
> 袁伟[MVP]
>
>
> "潘兆勇" <fz...@163.com> 写入消息新闻
> :ekBtaTaK...@TK2MSFTNGP12.phx.gbl...
> > 请问在安装程序中将组件部署在GAC中,采用什么方法最方便?

> > 我参照MSDN中所说的,写了一个.bat文件,想在安装最后一步用gacutil工具将程

> 集
> > 安装到GAC中,可是不知道如何让这个文件在安装后自动运行。好像没有什么类能

> 它


> > 部署到GAC,查MSDN,有两种方法,一是使用MSI 2.0(但不知如何使用),二是使

> > Gacutil.exe,不过自动部署好像用它不上。
> > 另外,我也在安装程序中写了注册表项,但我也不知道如何让安装程序修改我添加

> 册


> > 表项的“(默认)”键值。我自己添加“(默认)”键,并给它赋值,不过安装后在注

> 表
> > 中不是修改它(默认)的那个键,而是新增一个名为(默认)的键。这样做我在VS.Net

潘兆勇

unread,
Jun 5, 2003, 2:57:50 AM6/5/03
to
注册表的问题我已经解决,用VS.Net 2003就没问题。
但是GAC的问题我还是没有解决。我目前暂时用一个.bat文件,在安装后手动运行它。有没有更好的办法?
谢谢neon兄提醒,也谢谢各位不厌其烦地帮我解答。
不过不论从MSDN还是从网上的信息的操作来做,我有如下的结果(我的MSDN是MSDN For
VS.Net 2003,开发工具是VS.Net 2002):
1、注册表操作方面:根据MSDN中所述,要指定默认值,做如下操作:
指定默认值
(1)在“注册表编辑器”的值窗格中选择一个值名称。
(2)在“文件”菜单上,单击“重命名”。
(3)名称字段现在处于编辑模式,而且值名称突出显示。
(4)“编辑”菜单上,单击“删除”。
(5)ENTER 键。该值替换为“(默认值)”。
我按这种做法在我的部署程序的注册表页中添加了这样的一个项,结果安装过后,在注
册表中还是出现了两个“默认”注册表字符串值。其中第一个没有值,不可删除,不可
更名,第二个是我所设置的值,可以删除,可以更名,和我以前用字符串“(默认)”作
为名称一样。(配置GAC需要的是前面一个“默认”值)。

2、GAC方面:在文件系统Editor中的确有一个“Global Assembly Cache文件夹”的东
西,但是我往里面加装配件的时候,只是相当于添加了一个快捷方式。
举个例子说:比如我的装配件在我的机器上是d:\dlls,在GAC中加入只是将一个“快捷
方式”加入到c:\winnt\assembly。而部署的目标计算机如果没有这个目录,虽然添加
进去时不出错,但是实际GAC中并不包含这个装配件。

我的想法其实很简单:
1、将装配件安装到[ProgramFilesFolder][Manufacturer]\[ProductName],如
c:\program files\mycompany\myproduct\下。
2、在注册表中添加
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\AssemblyFolders\mycompan
y键,键的“(默认)”值(系统指定的)为
[ProgramFilesFolder][Manufacturer]\[ProductName]。
3、将[ProgramFilesFolder][Manufacturer]\[ProductName]下的装配件加入到GAC中。

做了很久,查了很多资料,就是没做出来。本人实在笨得可以。哪位大侠帮帮忙做个例
子吧。
附件是一个具有强名称的装配件,请帮忙做个例子。在这里先谢啦!

另外,不知为什么,微软新闻组全文搜索搜出来的结果想进去看详细信息提示页面无法
显示。错误信息是:
The page cannot be displayed.






"neon" <zheng...@hotmail-nojunk.com> 写入消息
news:OllwlYnK...@TK2MSFTNGP09.phx.gbl...

潘兆勇

unread,
Jun 6, 2003, 5:44:13 AM6/6/03
to
谢谢。我明白了。这个GAC文件是同一解决方案中的项目输出,而我要加入到安装程序的文件是一个现成的.dll。准确地说,是使用tlbimp将一个COM组件赋予一个Strong Name后的dll文件,没有源代码的,不是解决方案中的项目。这个该怎么处理。
不好意思,前面我没说明白,让您误解了我的意思。
再次感谢!
潘兆勇 你好,

不会啊,请看附件中的图片。


--
袁伟[MVP]


"潘兆勇" <fz...@163.com> 写入消息新闻
:OozrJ$yKDHA...@TK2MSFTNGP12.phx.gbl...

Kefroth

unread,
Jun 6, 2003, 10:32:02 AM6/6/03
to
潘兆勇 你好,

也可以啊,在GAC上单击右键,用Assembly项添加你的dll,它会自动被打入包中的。

--
袁伟[MVP]


"潘兆勇" <fz...@163.com> 写入消息新闻
:eJoOzABL...@tk2msftngp13.phx.gbl...
谢谢。我明白了。这个GAC文件是同一解决方案中的项目输出,而我要加入到安装程序

0 new messages