【问题标题】:MSBuildTasks and NuGet - How can I restore MSBuild.Community.Tasks.dll?MSBuildTasks 和 NuGet - 如何恢复 MSBuild.Community.Tasks.dll?
【发布时间】:2014-10-22 17:13:45
【问题描述】:

我有一个项目,其中安装了一个名为 MSBuildTasks 的 NuGet 包。它将两个文件:MSBuild.Community.Tasks.targets 和 MSBuild.Community.Tasks.dll 安装到解决方案目录中的 .build 目录。此包引用已添加到该项目目录中的 packages.config 文件中,因此当我构建项目(并启用 NuGet 包还原设置)时,它将恢复包,这很棒,因为我可以将源分发给其他开发人员并在我们的构建服务器上构建它,而不会丢失任何文件...

但是,问题是当 NuGet 恢复包时,它不会将这两个文件恢复到我第一次使用 Install-Package MSBuildTasks 命令安装它时的预期位置,该命令位于 @987654323 @ 目录。相反,它已将其安装到 $(SolutionDir)\packages\MSBuildTasks.1.4.0.78\tools 目录,所以现在如果我希望包含 MSBuild.Community.Tasks.targets 文件,我必须在我的 .csproj 或其他 .targets 文件中绝对引用此路径。这带来了一个问题,因为版本号无疑会发生变化,需要手动进行更正。

有什么方法可以将 MSBuildTasks .targets 和 .dll 文件恢复到最初安装到的 $(SolutionDir)\.build 的原始位置?当前恢复到包目录的行为虽然对其他包有意义,但对于这个特定包来说似乎是一个错误,因为我将无法知道要包含在我的其他 .targets 或 .targets 中的目录的版本号。 csproj 文件。

【问题讨论】:

    标签: visual-studio-2012 msbuild nuget msbuildcommunitytasks


    【解决方案1】:

    NuGet 还原只会将文件下载到包目录。它不会进行任何其他修改。

    查看MSBuildTasks NuGet package,添加到$(SolutionDir)\.build 的文件是由PowerShell 脚本添加的。还原 NuGet 包时不会运行此 PowerShell 脚本。

    您应该将$(SolutionDir)\.build 添加到您的源代码控制存储库中。

    【讨论】:

    • 但是签入 DLL 并没有破坏使用像 NuGet 这样的包管理器的目的吗?
    • 如果 NuGet 包添加了无法恢复的文件,那么最简单的解决方案是将这些特定文件添加到源代码管理中。另一种方法是稍微复杂一点的预构建过程,您可以在其中还原然后重新安装 MSBuildTasks NuGet 包。或者将 NuGet 包本身更改为不需要这些文件。
    • 自 1.5 版以来,此 PowerShell 脚本似乎已被删除,但“入门”指南仍建议使用 .build 文件夹。我提出了一个issue
    • @Neo 我已经在 GitHub 问题上给出了答案,但我会在这里添加它以防它帮助某人:
    【解决方案2】:

    对于较新的版本 1.5+,Nuget 包不会自行安装在解决方案目录中;不过这对我有用:

    <PropertyGroup>
        <MSBuildCommunityTasksPath>$(USERPROFILE)\.nuget\packages\msbuildtasks\1.5.0.235\tools</MSBuildCommunityTasksPath>
    </PropertyGroup>
    

    它确实涉及添加版本,但是如果有人知道一种方法可以在您更新软件包时不必更新路径上的版本,那将是很棒的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多