是否可以在不安装的情况下使用MSBuild Extension Pack?

时间:2009-11-21 22:17:04

标签: .net msbuild

有没有办法将MSBuild扩展包与“本地”引用一起使用,而不需要您运行安装程序?换句话说,您可以将目标存储在解决方案项目文件夹中,以便每个开发人员都不必安装它吗?

2 个答案:

答案 0 :(得分:20)

您必须在任务的导入声明之前声明属性 ExtensionTasksPath 。例如,看看:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">E:\Data\Development\My Code\Community\MSBuild\ExtensionPack\</ExtensionTasksPath>
  </PropertyGroup>

  <Import Project="$(ExtensionTasksPath)MSBuild.ExtensionPack.tasks"/>

  <Target Name="Demo">
    <MSBuild.ExtensionPack.FileSystem.File TaskAction="GetTempFileName">
      <Output TaskParameter="Path" PropertyName="TempPath"/>
    </MSBuild.ExtensionPack.FileSystem.File>

    <Message Text="TempPath: $(TempPath)" />
  </Target>

</Project>

MSBuild社区任务类似,但该属性名为 MSBuildCommunityTasksLib 。我认为对于SDC任务,它称为 TasksPath

答案 1 :(得分:2)

我无法使用相对路径(即不是c:\ blah但是.. \ blah)。

这是因为如果它是相对的,则无法重新使用ExtensionTasksPath变量,因为您的文件(.csproj)和MsBuild.ExtensionPack.tasks文件位于不同的位置,导致相对路径的值不同。

最后这就是让它为我工作的东西(放在.csproj文件的顶部):

    <PropertyGroup>
   <ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">..\4.0\</ExtensionTasksPath>
  </PropertyGroup>
  <Import Project="..\references\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/>

你需要“.. \ 4.0 \”而不是“”(空白)的原因是因为MsBuild.ExtensionPack.tasks文件检测到空白并且如果是这样的话会做一些不同的事情。我不想破解MsBuild.ExtensionPack.tasks文件,以防我以后想要升级它。