从Nuget包中引用MSBuildTasks

11

我正在尝试从一个MSBuild文件中引用MSBuildTasks,但是当使用NuGet for MSBuildTasks时,我不确定如何操作。

参考资料中提到了使用:

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

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

3个回答

6
我最近为 resourcelib 设置了这个,使用的是 MSBuildTasks 版本 1.4.0.45。在这个版本中将它添加到项目中会导致 DLL 被放置在一个名为“Build”的子目录中,看起来您需要进行检查。我尝试让它自动下载,但如果它在项目文件中被引用,则需要从一开始就存在于那里。
要将其添加到项目中,我使用了以下代码:
 <PropertyGroup>
  <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\Build</MSBuildCommunityTasksPath>
 </PropertyGroup>
 <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>

这里使用了MSBuildProjectDirectory,以便可以在命令行上使用MSBuild进行构建。


3
这个答案非常有帮助,但我发现 NuGet 放置 targets 文件的目录是:$(SolutionDir)\.build,所以如果上面的设置不起作用,我建议更新答案来设置以下内容:<MSBuildCommunityTasksPath>$(SolutionDir).build</MSBuildCommunityTasksPath>。 - providencemac
3
自版本1.5以来,NuGet包中添加“.build”文件夹的PowerShell脚本已被移除,但“入门指南”仍建议使用它。我已经提出了一个问题。链接:https://github.com/loresoft/msbuildtasks/issues/258。 - Neo

5

如果其他人再次遇到此问题,可以参考以下建议。安装MSBuildCommunityTasks通过NuGet时,解决方案中将添加一个.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"/>

这种做法是可行的,因为它直接告诉项目在packages文件夹中查找.Targets文件。请注意,如果您升级了MSBuildTasks版本,则必须更改Import元素。我是一个MsBuild新手,如果有人告诉我如何自动化这个过程,那就太好了!


为什么不加入 <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks"/> 呢?你的回答可能有疏漏。 - HankCa

0
目前,1.4.0.128在解决方案目录中创建.build文件夹(用于框架项目)。NuGet包无法正确安装到.Net Core 3.1项目中。我在我的解决方案中创建了一个MsBuild.Community.Tasks 4.7.2框架项目,并在那里部署了NuGet包。现在,我应该能够按照自述文件中的描述从我的.NetCore项目中调用它:
<PropertyGroup>
    <MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
</PropertyGroup>  

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接