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?
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
Merci beaucoup! La désinstallation de NET 4.6.1 et l'installation de 4.6.2 ont aidé! – Alterant