Question

Y at-il un moyen simple dans PowerShell (je gacutil.exe imaginer utiliser) pour lire à partir d'un document texte un chemin \ l'assemblage et l'enregistrer dans le GAC? Ainsi, par exemple un fichier txt qui ressemble à:

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

Le script PowerShell lirait que dans un cours d'eau, puis exécutez gacutil sur chacun de ces ensembles a trouvé? Je pense que ce serait quelque chose comme:

#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
}
Était-ce utile?

La solution

Si vous triez votre fichier texte tel que chacune dll est sur une ligne distincte, vous pouvez utiliser la commande Get-Content et conduit chacun à un filtre qui a fait votre commande:

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

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

Autres conseils

Que diriez-vous laisser l'inquiétude à propos de .Net 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($_)}

Je suggère d'appeler la fonction d'ajouter un ensemble à quelque chose GAC suivant les lignes directrices PowerShell Add-GacItem aiment. Aussi l'emplacement de gacutil.exe varie en fonction de votre système. Si vous avez VS 2008 installé, il devrait être à l'endroit indiqué ci-dessous.

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

Notez que l'applet de commande Split-chaîne vient de Pscx . La fonction est pas super robuste (pas de support générique ne vérifie pas pour les types bizarres comme DateTime), mais au moins il peut gérer l'invocation régulière et appel pipeline.

Voulez-vous remplacer gacutil.exe? Sinon, pourquoi ne pas utiliser le commutateur inclus / ìl de gacutil?

De la gacutil / h:

/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

Si vous créez un alias dans votre profil (il suffit de taper le profil $ à une invite de ps pour déterminer cet emplacement de fichier) comme si vous pouvez new-alias "gac" ($env:ProgramFiles+"\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe") utiliser gac comme ceci:

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

la dernière partie est la plus importante. il appelle gacutil avec les commutateurs que vous voulez.

Hope this helps.

Ce script PowerShell ajoutera des ensembles au GAC sans utiliser GACUtil. http://blog.goverco.com/2012 /04/use-powershell-to-put-your-assemblies.html

téléchargement Add-AssemblyToGlobalAssemblyCache.ps1 vous pouvez déployer sur le gac.

Exemple d'utilisation pour l'ajout de plusieurs ensembles Dir C:\MyWorkflowAssemblies | % {$_.Fullname} | .\Add-AssemblyToGlobalAssemblyCache.ps1

Voir la documentation complète en exécutant Get-Help .\Add-AssemblyToGlobalAssemblyCache.ps1 -Detailed

Ne voulant pas installer le SDK Windows 8 sur toutes les machines dont je avais besoin de mettre les assemblées dans le GAC pour obtenir gacutil, j'ai écrit un module en utilisant l'API powershell GAC. Il fonctionne avec une version .Net. Avec vous pouvez le faire comme PowerShell GAC pour:

Get-Content ListOfAssemblies.txt | Add-GacAssembly 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top