从Nuget包引用MSBuildTasks

从Nuget包引用MSBuildTasks,msbuild,nuget,Msbuild,Nuget,我正在尝试从MSBuild文件引用MSBuildTasks,但不确定在对MSBuildTasks使用NuGet时如何执行此操作 参考书上说要用 <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 使用msi文件安装MSBuildTasks后。但是,从NuGet安装时,它会将其放入包含版本的子文件夹中,因此如果升级MSBuildTask

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

参考书上说要用

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


使用msi文件安装MSBuildTasks后。但是,从NuGet安装时,它会将其放入包含版本的子文件夹中,因此如果升级MSBuildTasks,它将中断生成文件中的路径。通过NuGet安装MSBuildTasks时,引用它的最佳方式是什么?

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

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

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

$(MSBuildProjectDirectory)\Build

此处使用了
MSBuildProjectDirectory
,因此可以在命令行上使用MSBuild生成它。

如果其他人再次遇到此问题,请将其抛出此处。通过NuGet安装MSBuildCommunityTasks时,似乎会将.build文件夹添加到解决方案中,建议使用源代码签入该文件夹。但是,MSBuild.Community.Tasks.targets文件有一个
元素,该元素指向c:\Program Files(x86)文件夹,这是不正确的。使用MSI安装MsBuildCommunityTasks时,此文件夹有效。对于Nuget,这是无效的,它在解决方案的packages文件夹中安装MsBuildCommunityTasks。因此,我最终修改了.targets文件,并将MSBuildCommunityTasksPath更改为指向:

<MSBuildCommunityTasksPath>$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools</MSBuildCommunityTasksPath>
$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools
还是没有骰子。最后,我刚刚编辑了web项目文件,并将MSBuildCommunityTasks的导入元素更改为:

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


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

目前,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" />

$(SolutionDir)\.生成

这个答案非常有用,但我发现NuGet当前放置目标文件的目录是:
$(SolutionDir)\.build
,因此如果上述设置不起作用,我建议更新答案以设置以下内容:
$(SolutionDir)\.build
在添加
文件夹的NuGet软件包中显示PowerShell脚本。build
文件夹自1.5版以来已被删除,但《入门指南》仍建议使用它。我已经提出了一个问题。为什么没有
?你的答案可能有疏忽。