I have reviewed a lot of good information regarding Visual Studio Multi-Project templates, including:
- MSDN References for Project Element, & Project Template Wizards
- Tony Sneed blog - Build a multi-project Visual Studio template
My question is similar to the following question on StackOverflow: Visual Studio Multi-Project Templates rename namespaces and project names
Following is the resulting directory structure after creating a new multi-project template using "MyService" as the name - this is as expected:
- MyService
- Actor
- Api
- Client
- Interfaces
Within the "Actor" Directory, I want the project file to be MyService.Actor.csproj and I end up with Actor.csproj. Following are excerpts from the Main Template and Actor Template... (BTW I use a Wizard to pass the service name and other files are named as expected)
I expected TargetFileName=$saferootprojectname$.Actor.csproj
in the child template to result in the name of the project file being MyService.Actor.csproj
- but it is actor.csproj
and similarly for all other project files api.csproj
, client.csproj
and interfaces.csproj
(without MyService
prefix)
Main Template
<ProjectCollection>
<SolutionFolder Name="Dependencies">
</SolutionFolder>
<ProjectTemplateLink ProjectName="Actor">
Actor\Actor.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="Api">
Api\Api.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="Client">
Client\Client.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="Interfaces">
Interfaces\Interfaces.vstemplate
</ProjectTemplateLink>
</ProjectCollection>
Child Template
<Project TargetFileName="$saferootprojectname$.Actor.csproj" File="MyService.Actor.csproj" ReplaceParameters="true">
<ProjectItem ReplaceParameters="true" TargetFileName="App.config">App.config</ProjectItem>
<Folder Name="PackageRoot" TargetFolderName="PackageRoot">
<Folder Name="Config" TargetFolderName="Config">
<ProjectItem ReplaceParameters="true" TargetFileName="Settings.xml">Settings.xml</ProjectItem>
</Folder>
<ProjectItem ReplaceParameters="true" TargetFileName="ServiceManifest.xml">ServiceManifest.xml</ProjectItem>
</Folder>
<ProjectItem ReplaceParameters="true" TargetFileName="packages.config">packages.config</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Ping.cs">Ping.cs</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs</ProjectItem>
<Folder Name="Properties" TargetFolderName="Properties">
<ProjectItem ReplaceParameters="true" TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
</Folder>
<ProjectItem ReplaceParameters="true" TargetFileName="ServiceEventSource.cs">ServiceEventSource.cs</ProjectItem>
</Project>
Visual Studio 2015 Update 3 is being used.