从Nuget包引用MSBuildTasks

Mik*_*ole 10 msbuild nuget

我正在尝试从MSBuild文件引用MSBuildTasks,并且我不确定在使用NuGet for MSBuildTasks时如何执行此操作.

参考说要使用

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
Run Code Online (Sandbox Code Playgroud)

使用msi文件安装MSBuildTasks时.但是,从NuGet安装时,它会将其放在包含版本的子文件夹中,因此如果我升级MSBuildTasks,它将破坏构建文件中的路径.通过NuGet安装MSBuildTasks时,引用MSBuildTasks的最佳方法是什么?

red*_*yre 6

我最近使用MSBuildTasks版本1.4.0.45 为resourcelib设置了这个.在这个版本中将它添加到项目导致DLL被放置在"Build"子目录中,看起来你需要签入.我试图让它自动下载,但如果它在项目文件中引用它需要从一开始就在那里.

要将它添加到项目中,我使用了以下代码:

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

这里MSBuildProjectDirectory正在使用,因此可以在命令行上使用MSBuild构建它.

  • 这个答案非常有用,但是我发现NuGet放置目标文件的目录当前是:`$(SolutionDir)\ .build`,所以如果上面的设置不起作用,我建议更新答案来设置以下内容:`<MSBuildCommunityTasksPath> $(SolutionDir)\ .build </ MSBuildCommunityTasksPath> (3认同)
  • 从版本1.5开始,NuGet包中添加了`.build`文件夹的PowerShell脚本似乎已被删除,但"入门"指南仍建议使用它.我提出了[问题](https://github.com/loresoft/msbuildtasks/issues/258). (3认同)

tra*_*ter 5

只是把它扔到这里以防其他人再次面对这个问题.看来,当您通过NuGet安装MSBuildCommunityTasks时,会在解决方案中添加.build文件夹,建议使用源代码签入.但是,MSBuild.Community.Tasks.targets文件有一个<MSBuildCommunityTasksPath>元素,它指向c:\ Program Files(x86)文件夹,这是不正确的.使用MSI安装MsBuildCommunityTasks时,此文件夹有效.对于Nuget,这是无效的,Nuget会在解决方案的packages文件夹中安装MsBuildCommunityTasks.所以我最终修改了.targets文件,并改为MSBuildCommunityTasksPath指向:

<MSBuildCommunityTasksPath>$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools</MSBuildCommunityTasksPath>
Run Code Online (Sandbox Code Playgroud)

仍然没有骰子.最后,我刚刚编辑了web项目文件,并将MSBuildCommunityTasks的Import元素更改为:

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

这是有效的,因为它直接告诉项目在packages文件夹中查找.Targets文件.请注意,如果升级MSBuildTasks版本,则必须更改Import元素.我是一个MsBuild菜鸟,所以如果有人能告诉我如何自动化这个,那就太好了!