2012-08-02 47 views
10

我想從MSBuild文件中引用MSBuildTasks,並且我不確定如何在爲MSBuildTasks使用NuGet時執行此操作。從Nuget包引用MSBuildTasks

參考說,使用

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 

當您安裝使用MSI文件MSBuildTasks。但是,從NuGet進行安裝時,它會將其放入包含版本的子文件夾中,因此如果我升級MSBuildTasks,它將破壞構建文件中的路徑。當通過NuGet安裝MSBuildTasks時,引用MSBuildTasks的最佳方法是什麼?

回答

6

我最近使用MSBuildTasks 1.4.0.45版設置了resourcelib, 。在這個版本中,將它添加到項目中導致DLL被放置在「Build」子目錄中,這看起來像您需要簽入。我嘗試讓它自動下載,但是如果它在項目文件中引用,它需要從一開始就在那裏。

將其添加到項目中,我用下面的代碼:

<PropertyGroup> 
    <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\Build</MSBuildCommunityTasksPath> 
</PropertyGroup> 
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/> 

這裏MSBuildProjectDirectory被使用,因此它可以與MSBuild的命令行上構建。

+3

這個答案非常有幫助,但是我發現NuGet放置目標文件的目錄目前是:'$(SolutionDir)\。build',所以如果上述設置不起作用,我建議更新答案設置如下:' $(SolutionDir)\。build' – providencemac 2014-01-15 18:33:06

+2

從版本1.5開始,NuGet包中添加了'.build'文件夾的PowerShell腳本已被刪除,但'入門'指南仍然建議使用它。我提出了一個[問題](https://github.com/loresoft/msbuildtasks/issues/258)。 – Neo 2017-03-29 17:26:07

5

只是在這裏拋出這個以防別人再次面對這個問題。看起來,當您通過NuGet安裝MSBuildCommunityTasks時,會在解決方案中添加一個.build文件夾,建議使用源代碼簽入該解決方案。但是,MSBuild.Community.Tasks.targets文件有一個<MSBuildCommunityTasksPath>元素,該元素指向c:\ Program Files(x86)文件夾,該文件不正確。當您使用MSI安裝MsBuildCommunityTasks時,此文件夾有效。這對於Nuget來說是無效的,它將MsBuildCommunityTasks安裝在解決方案的packages文件夾中。所以,我最後修改.targets文件,並改變MSBuildCommunityTasksPath指:

<MSBuildCommunityTasksPath>$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools</MSBuildCommunityTasksPath> 

仍然沒有骰子。所以最後,我只是通過web工程文件編輯,並改變了導入元素MSBuildCommunityTasks這樣:

<Import Project="$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools\MSBuild.Community.Tasks.Targets"/> 

這工作,因爲它直接告訴項目,以尋找在包文件夾中的文件.Targets。請注意,如果您升級MSBuildTasks版本,則必須更改Import元素。我是MsBuild noob,所以如果有人能告訴我如何實現這個自動化,那會很棒!

+0

爲什麼不用''?也許在你的回答中監督。 – HankCa 2017-12-11 06:22:17