C#如何在没有GacUtil的情况下在GAC中注册程序集?

时间:2010-06-01 14:31:52

标签: c# gac

我需要使用批处理文件在GAC中注册程序集。有没有办法找到GacUtil.exe的安装位置,或者有没有办法在没有GacUtil的情况下注册程序集?

4 个答案:

答案 0 :(得分:25)

GacUtil没有安装只安装了SDK的框架安装 - 所以你不能保证它会安装在你正在安装的盒子上。

这在您的批处理文件中不起作用,但如果您自己开发了该应用程序,则可以使用下面描述的GacInstall方法:
http://msdn.microsoft.com/en-us/library/system.enterpriseservices.internal.publish.gacinstall.aspx

或者我建议生成一个msi文件来部署应用程序。这里的教程:
http://www.dreamincode.net/forums/topic/58021-deploying-a-c%23-application-visual-studio-setup-project/

在您的发行版中包含GacUtil.exe的副本是一个不可取的解决方案,因为它来自不同的许可证,您可能无权重新发布它

答案 1 :(得分:25)

您最好的方法是使用包裹Publish.GacInstall的powershell脚本,例如this one

答案 2 :(得分:9)

您可以通过执行以下操作将安装到GAC(全局程序集缓存)中

[Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices") | Out-Null 
[System.EnterpriseServices.Internal.Publish] $publish = new-object System.EnterpriseServices.Internal.Publish
$publish.GacInstall(<<FullFilePathToTheDll>>)

这与本机PowerShell的关系不大,而是通过PowerShell实例化和使用.NET库

执行iisreset

Source

答案 3 :(得分:1)

我使用了InnoSetup并创建了一个包含我的程序集的安装。

重要的一行如下:

Source: "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"; DestDir: "{app}"; StrongAssemblyName: "WinSCPnet, Version=1.3.7.7333, Culture=neutral, PublicKeyToken=2271ec4a3c56d0bf, ProcessorArchitecture=MSIL"; Flags: ignoreversion gacinstall uninsnosharedfileprompt