2013-06-21 59 views
3

我正在编写一个脚本,它会自动将Nuget文件打包并发布到我的私有存储库(文件共享)和私有符号服务器(本地主机上)。从'nuget pack'命令检索创建的NuGet包文件名?

当我在PowerShell中运行nuget pack我得到一个同时包含的NuGet和符号包的文件位置的字符串输出,但据我可以告诉有没有办法编程获得这些路径不必解析字符串。软件包的版本由.csproj本身决定,所以我不一定知道哪个版本将放在文件名中。

下面是从包命令的输出:

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

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

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

+0

呀,'OutputDirectory'是我使用现在唯一的问题是我需要代码包和符号包进入不同的目录(实际上,符号到一个http服务器)。 临时文件夹...现在有一个想法。 – nemec

+0

@nemec:如果您使用临时文件夹,您可以先将**。symbols.nupkg *移动到您的符号服务器。这只会将实际的软件包留在临时文件夹中,并且您可以通过将** .nupkg *移动到NuGet文件共享来完成,而不需要使用正则表达式来匹配确切的文件名称等。 – Nailuj

1

在PowerShell中解析输出并不难。

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

C:\用户\费伦\工作区\特殊\特殊\ Weingartner.Exceptional.1.2.6011.19372.nupkg