单源/多项目模板

时间:2012-07-31 15:07:35

标签: visual-studio visual-studio-2008 project-template visual-studio-templates

我想为Visual Studio 2008创建一个多项目模板,其中包含两个访问相同源文件的项目(移动和桌面开发的单一来源)。以下多项目模板:

<TemplateContent>
    <ProjectCollection>
        <ProjectTemplateLink ProjectName="Client.CF">Client\Template.CF.vstemplate</ProjectTemplateLink>
        <ProjectTemplateLink ProjectName="Client.FF">Client\Template.FF.vstemplate</ProjectTemplateLink>
        <!-- some other projects -->
    </ProjectCollection>
</TemplateContent>

将创建此结构:

Solution folder
  - Client.CF
    - Client.CF.csproj
    - Other project files
  - Client.FF
    - Client.FF.csproj
    - Other project files

对于单一来源,需要以下结构:

Solution folder
  - Client
    - Client.CF.csproj
    - Client.FF.csproj
    - Other project files

在玩了一些模板XML后,我怀疑是否可以创建这样的模板。有人已经实现了这个目标吗?

1 个答案:

答案 0 :(得分:0)

通过OP编辑...

不要这样做 - 它不起作用。

副标题:

我可以让我的一周回来吗?

为什么呢?好吧,项目中的许多文件都有相互关系。盲目地将狂野卡片链接到它们将在构建中包含它们但是关系将丢失。

即使忽略了这个基本缺陷,包含和排除文件的可能性范围......嗯,很多。在项目启动之前,不要将脆弱性和技术债务构建到项目中。

在单个项目中使用多个构建配置是一个更好的解决方案(双关语)。有关我正在讨论的事情,请参阅https://stackoverflow.com/a/4457508/492

我会在这里留下这个错误的答案,以防万一你在盲道上拯救了一次旅行,或者至少提高了你对这个问题的认识。嘿,把它想象成练习。嘿,至少我在学习。有时。

除此之外,通配符链接常用的实用程序类(如扩展方法)之类的东西可能是一件好事。请注意其含义。


原始故事....

我这样做是为了构建相同应用的6个(是 - SIX)版本。 AutoCAD - 他们喜欢每3年打破一次API。不要让我开始。我也在为其他兼容的应用程序构建,因此AutoCAD只有3个版本。我离题了。

我是这样做的。我有一个名为zSourceCode的额外项目 - 源代码。咄。我还有AssemblyInfoForAllProjects.cs文件。每个项目还有一个附加的AssemblyInfo.cs项目,其属性为AssemblyTitle&amp; AssemblyDescription,只是因为我想在名称和描述中识别构建版本。

链接到zSourceCode项目文件的其他项目如此......

<Compile Include="..\zSourceCode\**\*.*" Exclude="..\zSourceCode\Properties\AssemblyInfo.cs;..\zSourceCode\bin\**\*.*;..\zSourceCode\obj\**\*.*;..\zSourceCode\**\*.csproj;..\zSourceCode\**\*.user;..\zSourceCode\**\*.vstemplate;..\zSourceCode\readme.txt;..\zSourceCode\**\*.lsp;..\zSourceCode\**\*.scr;..\zSourceCode\**\*.ico;;..\zSourceCode\**\*.txt"> <Link>Src\%(RecursiveDir)%(Filename)%(Extension)</Link> </Compile>

忽略了我在readme.txt(带* .txt)上加倍的事实,你可能没有任何LISP(* .lsp)或AutoCAD(* .scr)的启动脚本,这就是我的要点它

使用此通配符语法,您可以将文件和文件夹添加到源项目,它们将传播到您的所有构建项目。您可以在该项目本身中添加特定于项目的任何代码。

我添加了Extension方法来修补版本之间的行为更改。它们位于解决方案之外的中心位置,因此我可以在一个地方修补所有与AutoCAD相关的内容。这很棘手,因为我想用绝对路径来引用它。让VS在编译链接中生成绝对路径的唯一方法是将这些东西放在另一个驱动器上(或将文件夹映射到另一个驱动器号)。

多项目模板的其余部分按照http://msdn.microsoft.com/en-us/library/ms185308.aspx进行,这可能是您获得第一块代码的地方。

在解决方案和解决方案之间找一个令人讨厌的文件夹的相当讨厌的问题。项目:http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/11d7da1d-40cf-4b5c-ac27-d7fe504062a8/。您可以通过编写Iwizard实现来解决这个问题,但这必须在GAC和blahblahblah中进行。我只是手动混洗它们并在Notepad ++中编辑.sln文件。 NP ++也可以方便地编辑项目文件。 VS只是在您更改项目时重新加载项目,除非您打破它们。我提到了源代码控制吗?

此外,第一次生成解决方案时,您必须关闭它并重新打开它以查看解决方案资源管理器中的链接。