如何在GAC中注册.NET DLL文件?


83

我已经制作了一个.NET.DLL文件,我想在GAC中注册。

我在Windows Server 2003命令提示符中使用了以下命令:

C:\"Path of dll"\>gacutil /i dllname.dll
'gacutil' is not recognized as an internal or external command,
operable program or batch file.

它说路径不正确。

我是否需要在.NET cmd提示符下使用它?如果是这样,我将无法找到.NET cmd提示符。


确切的错误消息是什么?是指通向gacutil.exe还是通向的道路dllname.dll
UuDdLrLrSs

Answers:


101

您可以使用该gacutil工具进行操作。最简单的形式:

gacutil /i yourdll.dll

您可以在“程序” ->“ Visual Studio” ->“ Visual Studio Tools”下的“开始”菜单中找到“ Visual Studio命令提示符” 。


7
如果没有Visual Studio,则可以在C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \中访问gacutil.exe,至少它是Win2012R2服务器上的位置。
sonyisda1年

我具有需要提升的功能,因此将dll放入汇编中是否具有特权?非管理员用户是否可以高程运行这些功能?
Susarla Nikhilesh,

我的机器在C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1工具下拥有它-还要求我通过提升的命令行运行命令。
neminem

35

你需要:

  • 为程序集强名(Visual Studio,“项目属性”,“签名”选项卡,对程序集进行签名)
  • 更改构建事件(“项目属性”,“构建事件”选项卡,“构建后”命令行)
   cd C:\ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin
   gacutil.exe / i“ $(TargetPath)” / f / nologo
   gacutil / l“ $(TargetName)” / nologo

现在,每次构建项目时,它将安装在GAC上。


在Visual Studio 2017中,您必须以管理员身份运行VS或gacutil因缺少权限而失败。
内森

19

只需C:\Windows\assembly使用Windows资源管理器将DLL文件拖放到文件夹中即可。

警告:

在.NET Framework的早期版本中,Shfusion.dll Windows Shell扩展使您可以通过将程序集拖动到文件资源管理器来进行安装。从.NET Framework 4开始,Shfusion.dll已过时。

来源:如何:将程序集安装到全局程序集缓存中


2
您将需要使用管理员帐户登录,因为“运行方式”不可用于拖放。
Salman Siddiqui 2014年

6
这对我没有影响-未添加库,没有错误消息。我正在使用管理员帐户。

8
“在早期版本的.NET Framework中,Shfusion.dll Windows Shell扩展使您能够通过在文件资源管理器中拖动它们来安装程序集。从.NET Framework 4开始,Shfusion.dll已过时。” msdn.microsoft.com/en-us/library/dkkx7f79(v=vs.110).aspx
njplumridge

强调“拖放”-复制和粘贴无效
Todd

13

这些响应不会告诉您gacutil驻留在C:\ WINDOWS \ Microsoft.NET \ Framework \ v1.1 *中。

我的v2.0文件夹中没有该文件。但是我尝试按照前面的建议将DLL拖放到C:\ WINDOWS \ Assembly文件夹中,并且只要它是.NET库,它就更容易并且可以正常工作。我还尝试了一个COM库,但失败了,并出现了一个错误,该错误是期望程序集清单。我知道这不是这里的问题,但我想提到的是,如果有人发现他们无法添加它,那可能就是原因。

汤姆


1
这些响应不会告诉您gacutilWindows随附的内容。
伊恩·博伊德

13

从维基百科

gacutil.exe是用于与GAC一起使用的.NET实用程序。

可以使用以下命令检查GAC中共享程序集的可用性:

gacutil.exe /l "assemblyName"

可以使用以下命令在GAC中注册共享程序集:

gacutil.exe /i "assemblyName"

或通过使用GUI将程序集文件拖放到以下位置:

%windir%\assembly\

如果使用/?标志,将简要描述此实用程序的其他选项,即:

gacutil.exe /?

GacUtil不随.NET一起提供。用于允许拖放以注册程序集的Shell拖放帮助器不再起作用。
伊恩·博伊德

5

如果您担心命令提示符,请尝试GACView

您尚未在DOS中正确设置PATH。您需要将路径指向gacutil所在的位置才能在DOS中使用它。


4
  • 运行V2012或系统中安装的任何版本的开发人员命令提示符

  • gacutil / i pathofDll

  • 输入

做完了!!!


提到“开发人员”命令提示符,很好!作为GACUTIL不可用于构建命令提示符
泥浆

3

正如Ando所说,只需将程序集拖放到C:\ windows \ assembly文件夹中即可。有用。


强调“拖放”-复制和粘贴无效
Todd

1
拖放不再起作用。Shell Fusion处理程序早已被弃用。
伊恩·博伊德

1

上述解决方案看起来很棒。但是,为简单起见,我只想输入程序集名称及其完整路径,例如:

gacutil -i C:\MyDlls\GacDeployedAssemblies\dllname.dll

注意C:\ MyDlls \ GacDeployedAssemblies


1

如果在Windows 7上,gacutil.exe(将程序集放入GAC)和sn.exe(以确保程序集的唯一性)位于C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ bin

然后转到gacutil的路径,如下所示,在替换程序集的路径后执行以下命令

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ bin> gacutil / i“替换为要放入GAC的程序集路径”


0

Publish选项卡转到application Files

然后,单击unnecessary files

之后,按排除键ok

最后,构建项目文件并运行项目。


0

我尝试了评论中的所有内容,但没有成功。所以我gacutil /i "path to my dll"从Powershell那里获得了成功。

还记得在Windows资源管理器中右键单击文件以获取“复制路径”选项时按Shift的技巧。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.