从Nuget包引用MSBuildTasks

时间:2012-08-02 19:15:16

标签: msbuild nuget

我正在尝试从MSBuild文件引用MSBuildTasks,而且我不确定在将NuGet用于MSBuildTasks时如何执行此操作。

参考说要使用

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

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

3 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分: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>

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

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

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

答案 2 :(得分: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" />