我正在使用.ps1脚本在生产Win 2008服务器r2上向GAC注册一组.NET 4.0程序集。程序集具有强名称,脚本不返回错误:
[Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices");
[System.EnterpriseServices.Internal.Publish] $publish = New-Object System.EnterpriseServices.Internal.Publish;
$publish.GacInstall("D:\MyComponents\EZTrac.Domain.Dealer.dll")
运行之后,我会查看GAC_MSIL(它应该在哪里),然后查看GAC_32和GAC_64以获得良好的衡量标准,但它不属于任何一种。
我使用this post作为指南。知道我忘记了什么吗?
答案 0 :(得分:5)
这是我为gaccing程序集编写的一个小函数函数。在这样做之前做了一些检查:
function Gac-Util
{
param (
[parameter(Mandatory = $true)][string] $assembly
)
try
{
$Error.Clear()
[Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices") | Out-Null
[System.EnterpriseServices.Internal.Publish] $publish = New-Object System.EnterpriseServices.Internal.Publish
if (!(Test-Path $assembly -type Leaf) )
{ throw "The assembly $assembly does not exist" }
if ([System.Reflection.Assembly]::LoadFile($assembly).GetName().GetPublicKey().Length -eq 0 )
{ throw "The assembly $assembly must be strongly signed" }
$publish.GacInstall($assembly)
Write-Host "`t`t$($MyInvocation.InvocationName): Assembly $assembly gacced"
}
catch
{
Write-Host "`t`t$($MyInvocation.InvocationName): $_"
}
}
答案 1 :(得分:1)
答案 2 :(得分:0)
正如您noted in the comments:在.Net 2.0中使用System.EnterpriseServices.Internal.Publish不允许您注册.Net 4.0程序集,如果出现任何问题,它不会返回任何错误。更新到PowerShell v3或更高版本或running older PowerShell versions using .Net 4.0是一种解决方案。阅读更多相关信息here。
其他替代方案正在使用.Net 4.0 gacutil或查看我的PowerShell GAC module,它能够在PowerShell v2中安装.Net 4.0程序集,如果出现任何问题则会出错。