2013-09-26 47 views
2

我的同事們很困惑,從Visual Studio中我可以構建一個解決方案,並自動從項目中創建NuGet包。當然,這是因爲我加入到我的csproj文件,以下以第一的PropertyGroup:「BuildPackage」屬性記錄在哪裏?

<BuildPackage>true</BuildPackage> 

我的同事不相信這種能力,並且不希望採用它,因爲他們看不到它的任何地方記錄。他們擔心這是一個不應該被利用的不受支持的定製。

我認爲他們的結論是錯誤的,但我確實承認沒有文件是奇怪的。我知道這個功能的唯一原因是因爲我讀了NuGet.targets文件。事後搜索文檔,我發現互聯網上唯一發現的是一篇簡單提到BuildPackage property的SO帖子。

我們可以做得比這更好嗎?哪裏有提到這個屬性的文檔,以及如何以及何時使用它?聽到「這種使用被禁止是因爲它沒有記錄」,這是一種恥辱。

回答

1

我知道這篇文章有點舊,但我也利用這個屬性,並且很好奇,知道它的命運。讓「功能」正確工作的最簡單方法是在我的解決方案中使用「啓用NuGet軟件包還原」,然後將該屬性添加到我想要輸出軟件包的項目中。這樣我就不需要將Nuget.targets導入和$(SolutionDir)屬性定義添加到我的解決方案中的每個項目中。這是一個很棒的「功能」,因爲只要我的AssemblyInfo元數據是正確的,我就不需要維護.nuspec文件。目前爲止它工作得很好......直到我發現從Nuget 2.7開始,「啓用NuGet包恢復」方法被認爲是過時的,不應該使用。所以......知道這個「功能」是否應該被使用是很好的。

+0

這不是一個答案,更像是問題的延伸。 –

+1

你是對的,我應該添加它作爲評論。我羞於垂頭。 – user3723367

3

通過將BuildPackage屬性爲您的項目文件記錄/透明(見下文)創建你的包,但的NuGet隊no longer recommends使用添加對屬性的支持機制,「MSBuild的集成包還原」:

在NuGet 2.7之前,MSBuild集成包恢復方法是 使用和推廣。儘管這種方法仍然可用,但NuGet 團隊建議使用「自動軟件包還原」和命令行代替。

相應地,在3.0版的NuGet Visual Studio擴展中,「啓用NuGet包恢復」上下文菜單項will be removed

正如您發現的那樣,BuildPackage是在您執行「啓用NuGet包恢復」時,Visual Studio添加到您的解決方案中的.nuget\NuGet.targets MSBuild文件中定義的目標。

<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites"> 
    <Exec Command="$(BuildCommand)" 
      Condition=" '$(OS)' != 'Windows_NT' " /> 

    <Exec Command="$(BuildCommand)" 
      LogStandardErrorAsError="true" 
      Condition=" '$(OS)' == 'Windows_NT' " /> 
</Target> 

Exec任務調用cmd.exe; $(BuildCommand)是在同一文件中定義的屬性:您的解決方案目錄中

<BuildCommand> 
$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols 
</BuildCommand> 

$(NuGetCommand)將評估爲.nuget\NuGet.exe

因此,將來雖然自動添加這些msbuild節點將不被支持,但您可以自己將它們添加到項目中或使用其他方法來執行完全相同的(完全支持的)命令行nuget pack