代码之家  ›  专栏  ›  技术社区  ›  Jeff Yates

安装MSBuild扩展

  •  1
  • Jeff Yates  · 技术社区  · 17 年前

    我已为开发人员使用的MSBuild创建了一个任务,并希望创建一个安装程序,将该任务和关联的.targets文件安装到程序文件(通常是32位XP上的C:/Program Files/MSBuild)中的MSBuild extensions文件夹中。

    为了正确地执行此操作,我想在安装时询问系统该文件夹的位置-是否有提供此信息的注册表项或其他安装程序属性?我打算使用WiX进行安装。

    2 回复  |  直到 17 年前
        1
  •  2
  •   Shay Erlichmen    17 年前

    Wix本身有一个MSBuild任务,所以我认为最好看看他们是如何完成的,relvent源代码是 Toolset.wxs (谷歌代码搜索)。

    查看他们定义MSBuild文件夹的部分:

    <DirectoryRef Id="ProgramFilesFolder">
        <Directory Id="Dir_MSBuild" Name="MSBuild">
            <Directory Id="Dir_MSBuildMS" Name="Microsoft">
                <Directory Id="Dir_MSBuildMSWix" Name="WiX">
                    <Directory Id="Dir_MSBuildMSWix35" Name="v3.5">
                        <Component Id="WixMSBuildBinaries35" 
                                  Guid="2CB1EA5F-2542-4AFF-A05B-FAF576265F89" 
                                  Win64="no">
                            <File Source="WixTasks.dll" Checksum="yes" 
                                  KeyPath="yes" Vital="yes" />
                        </Component>
                    </Directory>
                </Directory>
            </Directory>
        </Directory>
    </DirectoryRef>
    

    这将在\Program Files\MsBuild\Microsoft\Wix下安装Wix MsBuild任务(WixTasks.dll)

        2
  •  1
  •   si618    17 年前

    我们正是这样做的(还有更多:)

    创建一个wxi文件,其内容如下:

    <!-- Product name as you want it to appear in Add/Remove Programs-->
    <?if $(var.Platform) = x64 ?>
      <!-- Product name as you want it to appear in Add/Remove Programs-->
      <?define ProductName = "Custom MSBuild Tasks (64 bit)" ?>
      <?define Win64 = "yes" ?>
      <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
    <?else ?>
      <?define ProductName = "Custom MSBuild Tasks" ?>
      <?define Win64 = "no" ?>
      <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
    <?endif ?>
    
    <!-- Directory name used under MSBuild -->
    <?define InstallName = "CustomTasks" ?>
    

    <Fragment Id="ComponentsFragment">
      <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="$(var.PlatformProgramFilesFolder)">
          <Directory Id="MSBuildFolder" Name="MSBuild">
            <Directory Id="INSTALLLOCATION" Name="$(var.InstallName)">
              ... Your custom .Targets and tasks go here