4

我正在使用 .ps1 脚本将一组 .NET 4.0 程序集注册到生产 Win 2008 服务器 r2 上的 GAC。程序集具有强名称,脚本不返回错误

[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,但它不在其中任何一个中。

我用这篇文章作为指导。知道我在这里忘记了什么吗?

4

3 回答 3

5

这是我为 gaccing 程序集编写的一个小 util 函数。在这样做之前它会进行一些检查:

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): $_"
    }
}
于 2013-11-14T07:27:52.263 回答
1

经过测试,我在原始问题下的评论是正确的。问题是 PowerShell v2 无法注册 .NET 4.0 组件。为此,您必须安装WMF 3WMF 4才能获得 Powershell 3 或 4。

于 2013-11-18T17:02:02.513 回答
0

正如您在评论中指出的那样:在 .Net 2.0 中使用 System.EnterpriseServices.Internal.Publish 不允许您注册 .Net 4.0 程序集,如果出现任何问题,它不会返回任何错误。使用 .Net 4.0更新到 PowerShell v3 或更高版本或运行旧 PowerShell 版本是一种解决方案。在此处阅读更多相关信息。

其他替代方法是使用 .Net 4.0 gacutil 或查看我的PowerShell GAC 模块,该模块能够在 PowerShell v2 中安装 .Net 4.0 程序集,如果出现任何问题,它确实会出错。

于 2013-11-16T22:05:39.880 回答