将DLL拖放到windows server 2008.net 4.0中的GAC(“程序集”)

将DLL拖放到windows server 2008.net 4.0中的GAC(“程序集”),.net,.net-4.0,gac,.net,.net 4.0,Gac,我正在尝试将一些代码部署到客户端计算机,在那里我不想安装MS windows SDK工具。这意味着你没有访问“gacutil”的权限。我还没有为我的代码创建安装程序。似乎这些可能是.NET4.0中仅有的两个选项 在过去,我只需启动、运行、键入“assembly”,然后拖放我的dll 这不可能了吗?当我尝试这样做时,我没有收到任何错误消息,但是dll没有出现在“assembly”文件夹中。当我在我的开发机器上使用gacutil时,它可以正常工作,但dll仍然没有出现。在.net 4.0中,Micr

我正在尝试将一些代码部署到客户端计算机,在那里我不想安装MS windows SDK工具。这意味着你没有访问“gacutil”的权限。我还没有为我的代码创建安装程序。似乎这些可能是.NET4.0中仅有的两个选项

在过去,我只需启动、运行、键入“assembly”,然后拖放我的dll


这不可能了吗?当我尝试这样做时,我没有收到任何错误消息,但是dll没有出现在“assembly”文件夹中。当我在我的开发机器上使用gacutil时,它可以正常工作,但dll仍然没有出现。

在.net 4.0中,Microsoft删除了通过拖放将dll添加到程序集的功能

相反,您需要使用gacutil.exe,或者创建一个安装程序来执行此操作。微软实际上并不推荐使用gacutil,但我还是走了这条路

要在开发计算机上使用gacutil,请转到:
开始->程序->Microsoft Visual studio 2010->Visual studio工具->Visual studio命令提示符(2010)

然后使用这些命令分别卸载和重新安装。注意:我没有在卸载命令中包含
.dll

gacutil/u myDLL
gacutil/i“C:\Program Files\Custom\myDLL.dll”

要在非开发机器上使用Gacutil,必须将可执行文件和配置文件从开发机器复制到生产机器。看起来Gacutil有几个不同的版本。我在这里找到了为我工作的那个:
C:\ProgramFiles(x86)\Microsoft SDK\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe
C:\ProgramFiles(x86)\Microsoft SDK\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe.config

将文件复制到此处或相应的.net文件夹
C:\Windows\Microsoft.NET\Framework\v4.0.30319

然后使用这些命令分别卸载和重新安装
“C:\Users\BHJeremy\Desktop\安装到.net 4.0\gacutil.exe中的Gac”/u“myDLL”


“C:\Windows\Microsoft.NET\Framework\v4.0.30319\gacutil.exe”/i“C:\Program Files\Custom\myDLL.dll”
如果您安装了必要的
.NET
框架。前
.Net 4.0
.Net 3.5
,然后您可以将
Gacutil.exe
从任何机器复制到新机器

1) 在新服务器中以管理员身份打开CMD。
2) 遍历到复制Gacutil.exe的文件夹。对于eg-C:\程序文件(以我为例)。
3) 在cmd提示符中键入以下命令并安装。

C:\Program Files\gacutil.exe/I dllname


在可能的情况下,我需要复制gacutil.exe、gacutil.exe.config和gacutlrc.dll(从1033目录中)

客户端计算机上没有
gacutil
实用程序,Windows SDK许可证禁止将其重新分发给客户。当您的客户不能、不会(而且确实不应该)下载300MB Windows SDK作为应用程序安装过程的一部分时

您(或您的安装程序)可以使用官方支持的API在全局程序集缓存中注册程序集。Microsoft的Windows Installer技术知道如何为您调用此API。您必须咨询您的MSI安装工具(例如WiX、InnoSetup),了解它们自己的语法,以了解如何指示您希望在全局程序集缓存中注册程序集

但是MSI和gacutil没有做什么特别的事情。它们只是调用您可以自己调用的相同API。有关如何通过代码注册程序集的文档,请参阅:

删除知识库文章之前的更多文档:

结构的字段定义如下:

  • cbSize-以字节为单位的结构大小
  • dwFlags-保留,必须为零
  • guidScheme-添加引用的实体
  • szIdentifier-标识安装程序集的应用程序的唯一字符串
  • szNonCannonicalData-仅添加引用的实体可以理解的字符串。GAC仅存储此字符串
guidScheme字段的可能值可以是以下值之一:

FUSION\u REFCOUNT\u MSI\u GUID
-程序集由使用Windows Installer安装的应用程序引用。szIdentifier字段设置为MSIszNonCannonicalData设置为Windows Installer。此方案只能由Windows Installer本身使用。
FUSION\u REFCOUNT\u UNINSTALL\u SUBKEY\u GUID
-程序集由出现在添加/删除程序中的应用程序引用。szIdentifier字段是用于向添加/删除程序注册应用程序的令牌。
FUSION\u REFCOUNT\u FILEPATH\u GUID
-程序集由文件系统中的文件表示的应用程序引用。szIdentifier字段是此文件的路径。 FUSION_REFCOUNT_OPAQUE_STRING_GUID-程序集由仅由不透明字符串表示的应用程序引用。szIdentifier就是这个不透明的字符串。删除此引用时,GAC不会对不透明引用执行存在性检查


安装程序和gacutil的其他替代品是GUI工具,如或。或者,如果你喜欢PowerShell,你可以使用它,我是它的作者

您也可以使用命令提示符将文件复制到GAC。我使用以下批处理脚本复制DLL并重新启动IIS

copy /b/v/y "PathToAssembly\MyAssembly.dll" "C:\Windows\assembly\" 
iisreset /noforce
pause

省去了使用或安装gacutil的需要请记住Fusion API是非托管的。的当前参考
copy /b/v/y "PathToAssembly\MyAssembly.dll" "C:\Windows\assembly\" 
iisreset /noforce
pause