5

我正在编写一个脚本,它将自动打包 Nuget 文件并将其发布到我的私有存储库(文件共享)和私有符号服务器(在 localhost 上)。

当我nuget pack在 Powershell 中运行时,我得到一个字符串输出,其中包含 nuget 和符号包的文件位置,但据我所知,如果不解析字符串,就无法以编程方式获取这些路径。包版本是由.csproj本身决定的,所以我不一定知道文件名中会放哪个版本。

这是 pack 命令的输出:

Attempting to build package from 'MyProject.csproj'.
Building project 'C:\Users\me\prg\MyProject.csproj' for target framework '.NETFramework,Version=v4.0'.
Packing files from 'C:\Users\me\prg\bin\Release'.
Using 'Myproject.nuspec' for metadata.
Successfully created package 'C:\nuget\MyProject.1.0.0.0.nupkg'.

Attempting to build symbols package for 'MyProject.csproj'.
Building project 'C:\Users\me\prg\MyProject.csproj' for target framework '.NETFramework,Version=v4.0'.
Packing files from 'C:\Users\me\prg\bin\Release'.
Using 'MyProject.nuspec' for metadata.
Successfully created package 'C:\nuget\Myproject.1.0.0.0.symbols.nupkg'.

我应该硬着头皮写一些正则表达式来解析“成功创建的包”行吗?

4

3 回答 3

5

默认情况下nuget pack会将创建的包输出到当前目录。您可以通过指定OutputDirectory选项来覆盖它。我不清楚您从哪里运行nuget命令(无论是从C:\Users\me\prg\C:\nuget\还是其他地方),所以您可能已经知道这一点,但它可以为您提供另一种选择:

您可以为自己创建一个临时目录(例如C:\nuget\temp\),您可以将其指定为您的OutputDirectory选项。如果你在你的脚本中确保在运行之前这个目录是空的nuget pack,你可以简单地将 * .nupkg复制到你的文件共享中(然后将它移动到C:\nuget\,如果需要的话)。

于 2013-06-21T21:53:05.607 回答
2

在 powershell 中解析输出并不太难。

$a = nuget pack .\Exceptional.csproj -Prop Configuration=Release |  Select-String nupkg
$a -Replace "^[^']'", "" -Replace "'[^']$", ""

C:\Users\phelan\workspace\Exceptional\Exceptional\Weingartner.Exceptional.1.2.6011.19372.nupkg

于 2016-06-16T10:45:25.483 回答
0

我对@bradgonesurfing 提供的答案稍作更改,因为他部分为我工作。

$pack = . $nugetPath pack rest of command........ |  Select-String nupkg 
$pack -match "'(?<nupkg>.*)'"
$packageFile = $Matches["nupkg"]

为了在构建后事件中获取它,我会使用 powershell.exe 来编写一个 powershell 脚本。我在这里有一个示例,用于自动运行可以为 nuget 修改的 editbin:https ://gist.github.com/tcartwright/cc1bd4dc98349579630c43283c5f1fe9

于 2021-08-14T18:18:40.270 回答