2012-08-02 46 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