有一种简单的方法来在PowerShell中(I想象利用的Gacutil.exe)从一个文本文档读取路径\组件和在GAC注册了吗?因此,例如,看起来像一个.txt文件:

c:\test\myfile.dll
c:\myfile2.dll
d:\gac\gacthisfile.dll

在PowerShell脚本将读取到流,然后运行对每个那些组件的GACUTIL发现?我想这会是这样的:

#read files into array?

foreach ($file in Get-ChildItem -Filter "*.dll" )
{ 
  Write-Host $file.Name
  C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /nologo /i $file.Name
}
有帮助吗?

解决方案

如果你理清你的文本文件,使得每个DLL是一个单独的行,你可以使用Get-Content命令和管道每到一个过滤器,没有你的命令:

filter gac-item { C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /nologo /i $_}

get-content fileOfDlls.txt | ?{$_ -like "*.dll"} | gac-item

其他提示

如何让约GACUTIL的净烦恼吗?

# load System.EnterpriseServices assembly
[Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices") > $null

# create an instance of publish class
[System.EnterpriseServices.Internal.Publish] $publish = new-object System.EnterpriseServices.Internal.Publish

# load and add to gac :)
get-content fileOfDlls.txt | ?{$_ -like "*.dll"} | Foreach-Object {$publish.GacInstall($_)}

我会建议调用函数的程序集添加到GAC东西以下的PowerShell准则喜欢添加-GacItem。也将Gacutil.exe的位置变化的基础系统上。如果已经安装了VS 2008,它应该是在以下所示的位置。

function Add-GacItem([string]$path) {
  Begin {
    $gacutil="$env:ProgramFiles\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe"

    function AddGacItemImpl([string]$path) {
      "& $gacutil /nologo /i $path"
    }
  }
  Process {
    if ($_) { AddGacItemImpl $_ }
  }
  End {
    if ($path) { AddGacItemImpl $path }
  }
}

Get-Content .\dlls.txt | Split-String | Add-GacItem

请注意,该分割字符串小命令来自 Pscx 。该功能是不是超级强大的(不支持通配符不检查怪异的类型,如日期时间),但至少它可以处理常规调用和管道调用。

你要替换的Gacutil.exe?如果不是,为什么不使用GACUTIL的包括/ IL开关?

从GACUTIL /小时:

/il <assembly_path_list_file> [ /r <...> ] [ /f ]
  Installs one or more assemblies to the global assembly cache.
  <assembly_list_file> is the path to a text file that contains a list of
  assembly manifest file paths. Individual paths in the text file must be
  separated by CR/LF.
  Example: /il MyAssemblyList.txt /r FILEPATH c:\projects\myapp.exe "My App"
    myAssemblyList.txt content:
    myAsm1.dll
    myAsm2.dll

如果您创建个人资料的别名(只在PS提示符下键入$配置文件来确定该文件的位置),像这样new-alias "gac" ($env:ProgramFiles+"\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe")那么你可以使用GAC像这样:

get-childitem $basedirectory "*$filter.dll" | foreach-object -process{ WRITE-HOST -FOREGROUND GREEN "Processing $_"; gac /i $_.FullName /f}

最后部分是最重要的。它调用GACUTIL你想要的开关。

希望这有助于。

此PowerShell脚本将添加组件到GAC而不使用GACUTIL。 http://blog.goverco.com/2012 /04/use-powershell-to-put-your-assemblies.html

下载加载AssemblyToGlobalAssemblyCache.ps1后,您可以部署到GAC。

,用于将多个程序集Dir C:\MyWorkflowAssemblies | % {$_.Fullname} | .\Add-AssemblyToGlobalAssemblyCache.ps1使用例

通过运行Get-Help .\Add-AssemblyToGlobalAssemblyCache.ps1 -Detailed查看完整的文档

不希望在我需要把组件在GAC获得GACUTIL所有机器上安装Windows 8的SDK,我已经写了使用GAC API一个PowerShell模块。它适用于任何.NET版本。随着 PowerShell的GAC 你能做到像这样:

Get-Content ListOfAssemblies.txt | Add-GacAssembly 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top