从'nuget pack'命令中检索已创建的NuGet包文件名?

5
我正在编写一个脚本,它可以自动将Nuget文件打包并发布到我的私有仓库(一个文件共享)和本地主机上的私有符号服务器。在Powershell中运行“nuget pack”时,我会得到一个包含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'.

我应该勇敢地写一些正则表达式来解析“成功创建软件包”行吗?
3个回答

5
默认情况下,nuget pack 命令会将创建的软件包输出到当前目录。您可以通过指定 OutputDirectory 选项来覆盖此行为。我不清楚您运行 nuget 命令的位置(无论是在 C:\Users\me\prg\ 内部、C:\nuget\ 内部还是其他地方),所以您可能已经知道这一点,但它可以为您提供另一种选择:
您可以创建一个临时目录(例如 C:\nuget\temp\),并将其指定为您的 OutputDirectory 选项。接下来,在运行 nuget pack 前,请确保该目录为空。这样,您就可以简单地将 *.nupkg 复制到您的文件共享中(如果需要,然后将其移动到 C:\nuget\)。

是的,OutputDirectory 是我现在使用的,唯一的问题是我需要将代码包和符号包放入不同的目录中(实际上,符号包要放到一个 http 服务器中)。临时文件夹... 现在有了一个想法。 - nemec
@nemec:如果您选择使用临时文件夹,可以先将 **.symbols.nupkg* 移动到符号服务器上。这样,临时文件夹中只剩下实际的软件包,然后您可以将 **.nupkg* 移动到 NuGet 文件共享中,无需烦恼于匹配确切文件名等正则表达式。 - Julian

2

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

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

gives

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


1
如何在后期构建事件中获取它? - Vincent

1

我对@bradgonesurfing提供的答案进行了轻微修改,因为他的部分对我有用。

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

如果要在后置生成事件中获取它,我会使用powershell.exe来调用一个powershell脚本。我有一个示例,用于自动运行editbin,可以修改为nuget:https://gist.github.com/tcartwright/cc1bd4dc98349579630c43283c5f1fe9


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接