EPPlus依赖循环 [英] EPPlus dependency loop

查看:93
本文介绍了EPPlus依赖循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从PowerShell安装EPPlus时,我得到以下信息(所有命令都首次运行):

When installing EPPlus from PowerShell, I get the following (all commands are being run for the first time):

$PackageSource=Get-PackageSource -Name "PSGallery"
if (!$PackageSource.IsTrusted) { Set-PackageSource -Trusted -Name "PSGallery" > $null }

# NuGet PackageProvider
$PackageProvider=Get-PackageProvider -ListAvailable | Where-Object { $_.Name -eq "NuGet" }
$InstallPackageProvider=$false
if ($PackageProvider -eq $null) { $InstallPackageProvider=$true }
else {
  $TargetVersion=[Microsoft.PackageManagement.Internal.Utility.Versions.FourPartVersion]::Parse("2.8.5.208")
  if ($PackageProvider.Version -lt $TargetVersion) { $InstallPackageProvider=$true }
}
if ($InstallPackageProvider) { Get-PackageProvider -Name "NuGet" -ForceBootStrap > $null }

# Package Management
$PackageProvider=Get-Module -ListAvailable | Where-Object { $_.Name -eq "PackageManagement" }
$InstallPackageProvider=$false
if ($PackageProvider -eq $null) { $InstallPackageProvider=$true }
else {
  $TargetVersion=[System.Version]::new(1,4,5)
  if ($PackageProvider.Version -lt $TargetVersion) { $InstallPackageProvider=$true }
}
if ($InstallPackageProvider) { Install-Module -Name "PackageManagement" -MinimumVersion $TargetVersion -Force > $null }

# PowerShellGet
$PackageProvider=Get-PackageProvider -ListAvailable | Where-Object { $_.Name -eq "PowerShellGet" }
$InstallPackageProvider=$false
if ($PackageProvider -eq $null) { $InstallPackageProvider=$true }
else {
  $TargetVersion=[Microsoft.PackageManagement.Internal.Utility.Versions.FourPartVersion]::Parse("2.2.1.0")
  if ($PackageProvider.Version -lt $TargetVersion) { $InstallPackageProvider=$true }
}
if ($InstallPackageProvider) { Install-Module -Name "PowerShellGet" -MinimumVersion $TargetVersion -Force > $null }

$FilePath="~\Desktop"
$FileName="bat.bat"

New-Item -Path $FilePath -Name $FileName -ItemType File -Force > $null
$PackageProvider=Get-Module -ListAvailable | Where-object { ($_.Name -eq "PackageManagement") -and ($_.Version.ToString() -eq "1.0.0.1") }
if ($PackageProvider -ne $null) { Out-File -FilePath "$FilePath\$FileName" -Encoding ASCII -Append -InputObject ('rd "'+$($PackageProvider.ModuleBase)+'" /s /q') }

$PackageProvider=Get-Module -ListAvailable | Where-object { ($_.Name -eq "PowerShellGet") -and ($_.Version.ToString() -eq "1.0.0.1") }
if ($PackageProvider -ne $null) { Out-File -FilePath "$FilePath\$FileName" -Encoding ASCII -Append -InputObject ('rd "'+$($PackageProvider.ModuleBase)+'" /s /q') }

# Quit all PowerShell instances, open a command prompt as administrator and run the batch file

PS C:\Windows\system32> Get-Module -ListAvailable #(edited for brevity)

    Directory: C:\Program Files\WindowsPowerShell\Modules

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     1.4.5      PackageManagement                   {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}
Script     2.2.1      PowerShellGet                       {Find-Command, Find-DSCResource, Find-Module, Find-RoleCapability...}

PS C:\Windows\system32> Get-PackageProvider #(edited for brevity)

Name                     Version          DynamicOptions
----                     -------          --------------
NuGet                    3.0.0.1          Destination, ExcludeVersion, Scope, SkipDependencies, Headers, FilterOnTag, Contains...
PowerShellGet            2.2.1.0          PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, InstallUpd...

$PackageSource=Get-PackageSource -Name "PSGallery"
if (!$PackageSource.IsTrusted) { Set-PackageSource -Trusted -Name "PSGallery" > $null }

$Repository=Get-PSRepository -Name "NuGet"
if ($Repository -eq $null) { Register-PSRepository -Name "NuGet" -SourceLocation "https://www.nuget.org/api/v2" -PackageManagementProvider "NuGet" -InstallationPolicy "Trusted" }

Install-Module -Name "EPPlus" -Repository "NuGet" -MinimumVersion "4.5.3.1"

PackageManagement\Install-Package : Dependency loop detected for package 'EPPlus'.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\2.2.1\PSModule.psm1:9683 char:34
+ ... talledPackages = PackageManagement\Install-Package @PSBoundParameters
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Deadlock detected: (EPPlus:String) [Install-Package], Exception
    + FullyQualifiedErrorId : DependencyLoopDetected,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

Windows 2016 Standard,未安装Office,$ Host.Version = 5.1.14393.3053

Windows 2016 Standard, Office is not installed, $Host.Version = 5.1.14393.3053

推荐答案

我用 libphonenumber-csharp 包遇到了同样的麻烦。我显然不明白为什么它突然停止工作,但是 -SkipDependencies 对我来说是依赖性循环的答案:

I met the same trouble with libphonenumber-csharp package. I clearly don't understand why it suddendly stop working, but -SkipDependencies is for me the answer to dependency loop :

Install-Package libphonenumber-csharp -Destination ".\NugetPackages" -Force -Source 'https://www.nuget.org/api/v2' -ProviderName NuGet -RequiredVersion '8.10.23' -SkipDependencies -ErrorAction SilentlyContinue

我不知道它是否有帮助,但我先安装最新的Nuget提供程序在提升的PowerShell提示符下运行以下命令:

I don't know if it helps but I first Install the latest Nuget provider running following command in an elevated PowerShell prompt:

Install-PackageProvider Nuget –force –verbose

这篇关于EPPlus依赖循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆