37

次の 2 つのプロジェクトを含むソリューションのマルチプロジェクト テンプレートを作成できるようにしたいと考えています (インターフェイスにはビジネス レイヤーへの参照が含まれている必要があります)。

  • <proj_name>.interface
  • <proj_name>.business.

通常、以下を含む を含めることができます$safeprojectname$

[新しいプロジェクト] ダイアログ ボックスでユーザーが指定した名前

ただし、記事で指摘されているように、複数プロジェクトのビジュアル スタジオ テンプレートを構築する

ここでの問題は、各子テンプレート内で$safeprojectname$が現在のプロジェクト名を表していることです。親テンプレートからルート$safeprojectname$を渡す方法が必要です。

この SO question VS 2010 Multi-Project Template: Inter-Project Referencesで提案されているソリューションを を使用して実装しようとしてCustomParametersいますが、問題が発生しています。

私の圧縮されたテンプレート ディレクトリは次のようになります。

  • MultiTemplate.vstemplate
  • インターフェース
    • InterfaceTemplate.vstemplate
    • MyTemplate.Interface.csproj
  • 仕事
    • BusinessTemplate.vstemplate
    • MyTemplate.Business.csproj

Entire Directoryをダウンロードできますが、一部の抜粋を次に示します。

MultiTemplate.vstemplate

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
  <TemplateData><!--Removed for brevity --></TemplateData>
  <TemplateContent>
    <CustomParameters>
      <CustomParameter Name="$SolutionName$" Value="$safeprojectname$"/>
    </CustomParameters>
    <ProjectCollection>
      <ProjectTemplateLink ProjectName="$safeprojectname$.Interface">
        Interface\InterfaceTemplate.vstemplate
      </ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="$safeprojectname$.Business">
        Business\BusinessTemplate.vstemplate
      </ProjectTemplateLink>
    </ProjectCollection>
  </TemplateContent>
</VSTemplate>

Interface\InterfaceTemplate.vstemplate

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
  <TemplateData><!--Removed for brevity --></TemplateData>
  <TemplateContent>
    <Project TargetFileName="MyTemplate.Interface.csproj" 
             File="MyTemplate.Interface.csproj"
             ReplaceParameters="true">
    </Project>
  </TemplateContent>
</VSTemplate>

MyTemplate.Interface.csproj

<ItemGroup>
  <ProjectReference Include="..\$SolutionName$.Business\$SolutionName$.Business.csproj">
    <Project>{E5511F75-5B9C-4816-B991-E09225661CF4}</Project>
    <Name>MyTemplate.Business</Name>
  </ProjectReference>
</ItemGroup>

問題

新しいプロジェクトを作成する$SolutionName$と、文字列の一部が置き換えられません。代わりに、それは同じままです。

Q :この情報をマルチ プロジェクト テンプレートから各子テンプレートに適切に渡すにはどうすればよいですか?

<name>トークンの置換は機能しないように見えるため、タグ値を置換する方法を理解できればボーナスポイントです。

4

2 に答える 2

81

Visual Studio 2013 Update 2 では、これを行う組み込みの方法がついに追加されました。ProjectTemplateLink

このCopyParameters属性により、親テンプレートのすべての変数への子のアクセスが可能になりますext_

これには CustomParameters も必要ありません。ProjectTemplateLink を次のように変更します。

<ProjectTemplateLink ProjectName="$safeprojectname$.Interface" CopyParameters="true">
  Interface\InterfaceTemplate.vstemplate
</ProjectTemplateLink>

そして、次の.csproj ように子供の目標を達成できます。

<ItemGroup>
  <ProjectReference Include="..\$ext_safeprojectname$.Business\$ext_safeprojectname$.Business.csproj">
    <Project>{E5511F75-5B9C-4816-B991-E09225661CF4}</Project>
    <Name>MyTemplate.Business</Name>
  </ProjectReference>
</ItemGroup>
于 2014-06-04T17:05:10.313 に答える