创建多项目 Visual Studio 模板时出现奇怪的文件夹层次结构

Weird folder hierarchy when creating multi-project Visual Studio template

提问人:Ceottaki 提问时间:6/27/2013 更新时间:9/25/2019 访问量:2791

问:

我正在为 Visual Studio 2012 手动创建多项目模板,并遵循了此页面中的准则:http://msdn.microsoft.com/en-us/library/ms185308.aspx

我遇到的问题是,使用此模板创建了一个奇怪的文件夹结构,这不是我通常期望的。我为名为 SolutionName 的解决方案获取的文件夹结构:

[SolutionName]
     |
     \--- SolutionName.sln
     |
     \--- [SolutionName]
               |
               \--- Project1
               |       |
               |       \--- Project1.csproj
               \--- Project2
                       |
                       \--- Project2.csproj

现在,我通常期望的是:

[SolutionName]
     |
     \--- SolutionName.sln
     |
     \--- Project1
     |       |
     |       \--- Project1.csproj
     \--- Project2
             |
             \--- Project2.csproj

有什么方法可以实现第二个文件夹结构吗?

此外,在模板中指定解决方案文件夹时,它们也会被创建为实际文件夹,有什么方法可以避免这种情况吗?

这是我的多项目 vstemplate 文件的样子:

<?xml version="1.0"?>
<VSTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Type="ProjectGroup" Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
  <TemplateData>
    <Name>My Multi-Solution Template</Name>
    <Description>No Description.</Description>
    <Icon>__TemplateIcon.png</Icon>
    <PreviewImage>__PreviewImage.png</PreviewImage>
    <ProjectType>CSharp</ProjectType>
    <SortOrder>1000</SortOrder>
    <CreateNewFolder>true</CreateNewFolder> <!-- No use in trying false here. -->
    <DefaultName>SolutionName</DefaultName>
    <ProvideDefaultName>true</ProvideDefaultName>
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
    <LocationField>Enabled</LocationField>
  </TemplateData>
  <TemplateContent>
    <ProjectCollection>
      <SolutionFolder Name="Application">
    <SolutionFolder Name="Tests">
      <ProjectTemplateLink ProjectName="$safeprojectname$.UnitTests">UnitTests\UnitTests.vstemplate</ProjectTemplateLink>
    </SolutionFolder>
    <ProjectTemplateLink ProjectName="$safeprojectname$.Core">Core\Core.vstemplate</ProjectTemplateLink>
    <ProjectTemplateLink ProjectName="$safeprojectname$.Infrastructure">Infrastructure\Infrastructure.vstemplate</ProjectTemplateLink>
    <ProjectTemplateLink ProjectName="$safeprojectname$.Model">Model\Model.vstemplate</ProjectTemplateLink>
      </SolutionFolder>
      <SolutionFolder Name="Service">
    <ProjectTemplateLink ProjectName="$safeprojectname$.ServiceHost">ServiceHost\ServiceHost.vstemplate</ProjectTemplateLink>
    <ProjectTemplateLink ProjectName="$safeprojectname$.ServiceLibrary">ServiceLibrary\ServiceLibrary.vstemplate</ProjectTemplateLink>
      </SolutionFolder>
    </ProjectCollection>
    <CustomParameters />
  </TemplateContent>
</VSTemplate>

谢谢!

模板 visual-studio-templates

评论

0赞 Chamika Sandamal 7/4/2016
Visual Studio 模板和目录创建可能存在问题

答:

0赞 geoid 7/2/2013 #1

我遇到了完全相同的问题。我发现了这个类似的问题,并建议使用嵌套模板和向导,我正要尝试一下......

评论

1赞 Ceottaki 7/4/2013
嗨,大地水准面,我实际上知道如何使用向导DLL来做到这一点,并将所有内容移动到正确的文件夹,但这样做似乎不对,我宁愿在vstemplate中有一些东西,我可以配置从一开始就这样做......
1赞 geoid 7/4/2013
同意,为此不得不求助于向导似乎是一个完全的黑客。
0赞 tofutim 12/11/2013
我想知道这是否在 VS2013 中修复,它肯定不在 VS2012 中。
1赞 boj 3/3/2014
Visual Studio 2013 也有同样的问题,不知道如何解决。有什么想法吗?
0赞 Lews Therin 7/20/2016
对于@boj和其他像我一样在谷歌搜索中偶然发现这个问题的人,VS2013 解决了这个问题。请看这个答案。如果像我一样,您使用的 VS 版本早于该答案中指定的版本,那么我们似乎不走运。:(
0赞 Dbl 9/25/2019 #2

有关此主题的其他信息,请查看此处。也许文档团队会在某个时候记录这一点。

您还可以从 VS Marketplace 安装 Amusoft 工具以立即移动文件夹。它还将更新解决方案和项目间引用。