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

12

我正在为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模板和目录创建问题的重复。 - Chamika Sandamal
2个回答

0

请点击此处获取关于该主题的更多信息。或许文档团队将在某个时刻对其进行文档化。

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


0

我遇到了完全相同的问题。我找到了这个类似的问题,其中建议使用嵌套模板和向导,我正准备尝试一下...


1
嗨,geoid,我知道如何使用向导DLL并将所有内容移动到正确的文件夹中来完成这个操作,但是这样做似乎不太对,我更喜欢在vstemplate中拥有一些可以从一开始就配置的东西... - Ceottaki
1
同意,似乎只能通过向导来实现这个目的,这是一种完全的hack方法。 - geoid
我想知道这个问题在VS2013中是否已经解决,但在VS2012中肯定没有。 - tofutim
1
Visual Studio 2013也遇到了同样的问题,不知道该如何解决。有什么想法吗? - boj
对于@boj和其他像我一样通过谷歌搜索发现这篇文章的人,VS2013已经解决了这个问题。请参考这个答案。如果你和我一样使用的是早于该答案指定版本的VS版本,那么看来我们就没办法了。:( - Lews Therin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接