2017-08-08 1 views
0

J'ai un script PowerShell v2 avec .Net 4.5 qui compresse les anciens fichiers. Comme ceci:Problème avec System.IO.Compression

[Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") 
... 
$files = Get-Childitem ... 
... 
$zip = [System.IO.Compression.ZipFile]::Open($arcpath + $curname, "Create") 
foreach ($onefile in $files) { 
    [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip, $onefile.FullName, $onefile.Name, "Optimal") | out-null 
} 

Cela a fonctionné très bien jusqu'à ce que j'aie installé .Net 4.6.1 (qui est nécessaire pour un autre projet).

Maintenant, il renvoie une erreur:

 
The following exception occurred while retrieving member "Open": "Could not load 
file or assembly 'System.IO.Compression, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089' or one of its dependencies. 
Reference assemblies should not be loaded for execution. They can only be loaded 
in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)" 
At line:1 char:7 
+ $zip = <<<< [System.IO.Compression.ZipFile]::Open('C:\Temp\1.zip', "Create") 
    + CategoryInfo   : NotSpecified: (:) [], ExtendedTypeSystemException 
    + FullyQualifiedErrorId : CatchFromBaseGetMember 

J'ai installé WMF 5.1 pour utiliser les fonctions de compression PS5 natives. Mais il jette aussi une erreur:

Compress-Archive -Path $files -DestinationPath C:\Temp\Script\test.zip -CompressionLevel Optimal 
 
Add-Type : Could not load file or assembly 'System.IO.Compression, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. 
Reference assemblies should not be loaded for execution. They can only be loaded 
in the Reflection-only loader context. (Exception from HRESULT: 0x80131058) 
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:469 char:9 
+   Add-Type -AssemblyName System.IO.Compression 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [Add-Type], BadImageFormatException 
    + FullyQualifiedErrorId : System.BadImageFormatException,Microsoft.PowerShell.Commands.AddTypeCommand 

Comment puis-je résoudre ce problème?

+0

L'installation a échoué. En l'absence d'une meilleure suggestion, je désinstallerais tous les frameworks NET en utilisant un outil spécial de désinstallation de NET, puis je réinstallerais tout. P.S. votre code fonctionne pour moi dans Windows 7 + NET 4.6.2 et WMF 5.1 – wOxxOm

+0

Merci beaucoup! La désinstallation de NET 4.6.1 et l'installation de 4.6.2 ont aidé! – Alterant

Répondre

0

Enfin, le problème a été découvert. Nous utilisons une solution personnalisée qui utilise NLog. NLog ajoute une référence à System.IO.Compression à la solution. Lors de l'installation de la solution, il déploie la DLL (probablement l'ancienne ou de manière incorrecte). Nous avons exclu dll de l'installateur et maintenant tout fonctionne bien.

0

Désinstallé NET 4.6.1, installé NET 4.6.2. L'issue a été fixée.