【问题标题】:Referencing MSBuildTasks from Nuget package从 Nuget 包中引用 MSBuildTasks
【发布时间】:2012-08-02 19:15:15
【问题描述】:

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

参考说要使用

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

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

【问题讨论】:

    标签: msbuild nuget


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这个答案很有帮助,但是我发现NuGet放置目标文件的目录当前是:$(SolutionDir)\.build,所以如果上面的设置不起作用,我建议更新答案设置以下:&lt;MSBuildCommunityTasksPath&gt;$(SolutionDir)\.build&lt;/MSBuildCommunityTasksPath&gt;
    • 自 1.5 版以来,添加 .build 文件夹的 NuGet 包中的 PowerShell 脚本似乎已被删除,但“入门”指南仍建议使用它。我提出了一个issue
    【解决方案2】:

    只是把它扔在这里,以防其他人再次遇到这个问题。貌似在通过NuGet安装MSBuildCommunityTasks的时候,解决方案中增加了一个.build文件夹,建议用源码签入。但是,MSBuild.Community.Tasks.targets 文件有一个 &lt;MSBuildCommunityTasksPath&gt; 元素,它指向 c:\Program Files(x86) 文件夹,这是不正确的。当您使用 MSI 安装 MsBuildCommunityTasks 时,此文件夹有效。这在 Nuget 的情况下无效,它将 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"/>
    

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

    【讨论】:

    • 为什么没有&lt;Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks"/&gt;?可能会疏忽你的回答。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      相关资源
      最近更新 更多