2013-06-21 62 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