【问题标题】:Generate Visual Studio Project Templates with CruiseControl.Net or MSBuild使用 CruiseControl.Net 或 MSBuild 生成 Visual Studio 项目模板
【发布时间】:2011-06-14 20:53:57
【问题描述】:

我在 CruiseControl.Net 中有一个工作流程,它成功构建和测试了一个调用我的 Visual Studio 2010 解决方案的 MSBuild 项目。

如何在 CruiseControl.Net 或 MSBuild 中创建 Visual Studio 项目模板?构建服务器没有安装 Visual Studio 2010。

感谢您的宝贵时间!

注意:这可以扩展到任何其他可以使用批处理脚本编写的解决方案,但我无法在机器上安装 Visual Studio 2010。

【问题讨论】:

    标签: visual-studio templates msbuild cruisecontrol.net


    【解决方案1】:

    我发现创建一个包含 .vstemplate 文件的 zip 文件会创建一个 Visual Studio 项目模板。

    【讨论】:

      【解决方案2】:

      如果您想拥有多个模板,并且还希望它们在 Visual Studio 中“漂亮”地出现(即划分为目录),则可以使用一些技巧。

      1. 创建一个目录结构来模拟您想要显示的部分
      2. 为每个模板创建一个目录来保存文件

      举一个应该是标志的 Enum 类型的简单示例。我们有一个目录 FlagEnum,其中包含

      FlagEnum.cs

      namespace $rootnamespace$
      {
          using System;
      
          /// <summary>
          /// 
          /// </summary>
          [Flags]
          public enum $safeitemrootname$
          {
              // Suggest using hex rather than decimals as below to avoid overlapping/missing values
              A = 0x1,
              B = 0x2,
              C = 0x4,
              D = 0x8,
              E = 0x10,
              F = Ox20
          }
      }
      

      MyTemplate.vstemplate

      <VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
        <TemplateData>
          <DefaultName>Flags.cs</DefaultName>
          <Name>Flag Enum</Name>
          <Description>Enum that is meant to be a set of flags</Description>
          <ProjectType>CSharp</ProjectType>
          <SortOrder>10</SortOrder>
          <Icon Package="{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}" ID="4515" />
        </TemplateData>
        <TemplateContent>
          <References />
          <ProjectItem SubType="Code" TargetFileName="$fileinputname$.cs"    ReplaceParameters="true">Enum.cs</ProjectItem>
        </TemplateContent>
      </VSTemplate>
      

      然后我们有一个 MSBUILD 文件来生成 zip 文件 - 它使用社区任务扩展来获得 Zip 功能

      <?xml version="1.0" encoding="UTF-8"?>
      <Project DefaultTargets="Build"     xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
          <!-- Import a bunch of external targets -->
          <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
      
          <!-- The templates we want to produce -->
          <ItemGroup>
                     <ItemTemplate Include="FlagEnum" />
                     <!--
          <ItemTemplate Include="GlobalConfigurationTask">
              <Category>Configuration\</Category>
             </ItemTemplate>
                      -->
          </ItemGroup>
      
         <!-- Ok, standard action is to create clean zip files -->
         <Target Name="Build" DependsOnTargets="Clean;Zip;" />
      
          <Target Name="Clean">
          <!-- Need this for the first time through when Build doesn't exist -->
          <MakeDir Directories="Build" Condition="!Exists('Build')" />
          <!-- Can't delete it if it has contents, so delete them first -->
          <Delete Include="Build\**\*.*" Condition="!Exists('Build')" />
          <RemoveDir Directories="Build" />
          <MakeDir Directories="Build" Condition="!Exists('Build')" />
          </Target>
      
          <Target Name="Zip" Outputs="%(ItemTemplate.Identity)" >
              <MakeDir Directories="Build\%(ItemTemplate.Category)" Condition="%(ItemTemplate.Category) != ''" />
              <CreateItem Include="$(MSBuildProjectDirectory)\%(ItemTemplate.Category)%(ItemTemplate.Identity)\**\*.*" Exclude="$(MSBuildProjectDirectory)\%(ItemTemplate.Category)%(ItemTemplate.Identity)\**\_svn\**\*.*;$(MSBuildProjectDirectory)\%(ItemTemplate.Category)%(ItemTemplate.Identity)\**\.svn\**\*.*">
                  <Output TaskParameter="Include" ItemName="ZipFiles" />
              </CreateItem>
              <Zip Files="@(ZipFiles)" ZipFileName="$(MSBuildProjectDirectory)\Build\%(ItemTemplate.Category)%(ItemTemplate.Identity).zip" WorkingDirectory="$(MSBuildProjectDirectory)\%(ItemTemplate.Category)%(ItemTemplate.Identity)" />
          </Target>
      </Project>
      

      这将生成一个构建目录结构,其中所有压缩模板都位于正确的位置。然后,您只需将其复制到适当的 \Templates\ItemTemplates\Visual C# 目录

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 2022-11-28
        • 2010-12-20
        • 1970-01-01
        • 2018-01-08
        相关资源
        最近更新 更多