我正在 Visual Studio 中构建模板。该模板由 3 个 C# 项目组成。项目名称如下:我根据模板创建的解决方案的名称,后跟项目 1/项目 2/项目 3。例如,如果我调用从我的模板 SolutionProject 创建的解决方案,则 3 个项目的项目名称分别为:SolutionProject.Project1/Project2/Project3。我在我的 .vstemplate 中使用以下宏来执行此操作:
<ProjectCollection>
<ProjectTemplateLink ProjectName="$projectname$.Project1">Project1\MyTemplate.vstemplate</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.Project2">Project2\MyTemplate.vstemplate</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.Project3">Project3\MyTemplate.vstemplate</ProjectTemplateLink>
</ProjectCollection>
为了修复导致问题的引用,我在每个项目的 .csproj 中使用了以下宏。例如,对于引用 Project2 的 Project3,我使用了:
<ItemGroup>
<ProjectReference Include="..\$(ProjectName.Replace('.Project3', '')).Common\$(ProjectName.Replace('.Project3', '')).Project2.csproj">
<Project>{GUID}</Project>
<Name>$(ProjectName.Replace('.Project3', '')).Project2</Name>
</ProjectReference>
否则,引用将是 NameOfProject.Project3.Project2 而不是所需的 NameOfProject.Project2。
最后,我必须更改 C# 文件中的 using 语句。我一直尝试这样做的一种方法是在 .cs 文件中使用 $safeprojectname$ 宏,并且该宏似乎有效。但是,我遇到了与参考文献类似的问题。如果我在 NameOfProject.Project3 项目的 .cs 文件中使用 $safeprojectname$.Project2 宏,这将转换为使用 NameOfProject.Project3.Proejct2;请注意,NameOfProject 是一个通用名称,它可以取任何值,它采用您为使用模板构建的项目提供的名称。我在参考资料中使用的解决方案不起作用,我的想法已经用完了。