巧克力安装问题与chocolateyinstall.ps1或nuspec文件

Ste*_*ong 4 chocolatey

我正在尝试创建一个Chocolatey包,并能够将"choco pack"和"choco push"发送到本地的chocolatey.server(简单服务器)存储库.我已将我配置C:\ProgramData\Chocolatey\config\chocolatey.config为指向我当地的chocolatey.server网址.当我试图跑

choco install test1
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

包test1想要运行'chocolateyinstall.ps1'.注意:如果不运行此脚本,安装将失败.注意:要下次自动确认,请使用'-y'或考虑设置'allowGlobalConfirmation'.运行'choco feature -h'了解更多详情.你想运行脚本吗?([Y] es/[N] o/[P] rint):Y

错误:无法绑定参数,因为多次指定参数"file".要为可以接受多个值的参数提供多个值,请使用数组语法.例如," - 参数value1,value2,value3".nimatest的安装没有成功.运行'C:\ ProgramData\chocolatey\lib\test1\tools\chocolateyinstall.ps1'时出错.请参阅日志了解详情.

Chocolatey安装0/1包.1个包失败了.有关详细信息,请参阅日志(C:\ ProgramData\chocolatey\logs\chocolatey.log).

失败 - test1(退出-1) - 运行'C:\ ProgramData\chocolatey\lib\test1\tools\chocolateyinstall.ps1'时出错.请参阅日志了解详情.

在我的test.nuspec中我有以下内容:

<files>
  <!-- This section controls what actually gets packaged into the Chocolatey package -->
  <file src="tools*" target="tools" />
  <!-- Building from Linux? You may need this instead: <file src="tools/*" target="tools" /> -->
</files>
Run Code Online (Sandbox Code Playgroud)

在我的chocolateyinstall.ps1中,我有:

$ErrorActionPreference = 'Stop';
$packageName= 'Test1'
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$fileLocation = Join-Path $toolsDir 'Test1.exe'

$packageArgs = @{
  packageName = $packageName
  fileType = 'exe'
  file = $fileLocation
  silentArgs = "/SP"
  validExitCodes= @(0, 3010, 1641)
  softwareName = 'Test1*'
  checksum = ''
  checksumType = 'md5'
  checksum64 = ''
  checksumType64 = 'md5'
}

Install-ChocolateyPackage @packageArgs
Run Code Online (Sandbox Code Playgroud)

fer*_*der 6

错误

该错误告诉您file多次指定参数,这意味着您可能具有以下之一:

  • 已经file两次列入你的$packageArgs
  • 指定fileTypefile调用Install-ChocolateyPackage,只有filetype(但filetype由于部分参数名称匹配,PowerShell传递两个参数)
  • 通过了两个@packageArgsfile作为参数

我们已将此问题添加到https://chocolatey.org/docs/troubleshooting.

如果您已经解决了这个问题,那么现在可能会遇到其他错误.请参阅下一节以了解原因.

代码

你试图传递参数Install-ChocolateyInstallPackage,而不是Install-ChocolateyPackage.

如果您按照链接进行操作,您将注意到Install-Chocolatey Install Package适用于本地嵌入或UNC共享二进制文件的区别,其中Install-ChocolateyPackage用于提取远程资源.

创建包推荐

当您创建包时,我们强烈建议您使用choco new(来自最新发布的Chocolatey版本),因为它生成的包装中包含已生成的差异文档chocolateyInstall.ps1.我们称之为"及时文档".

虽然看起来您确实使用了choco new基于您的代码,但我只是想补充一点,最新版本将提供有关创建包的最有用的文档.