1

我想为 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 之后,我怀疑是否可以创建这样的模板。有没有人已经做到了这一点?

4

1 回答 1

0

由OP编辑...

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

字幕:

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

为什么?嗯,项目中的许多文件都相互关联。盲目地链接到它们的通配符会将它们包含在构建中,但关系将会丢失。

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

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

我会在这里留下这个错误的答案,以防万一它让你走上死胡同,或者至少提高你对这个问题的认识。嘿,把它当作练习吧。嘿,至少我在学习。有时。

顺便说一句,通配符链接诸如扩展方法等常用实用程序类之类的东西可能是一件好事。请注意其影响。

.
.

原来的故事……

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

这是我的做法。zSourceCode我有一个名为源代码的额外项目。呃。我也有AssemblyInfoForAllProjects.cs文件。每个项目还有一个带有属性AssemblyTitle&的附加 AssemblyInfo.cs 项目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) 的启动脚本,这就是它的要点。

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

我添加了扩展方法来修补版本之间的行为变化。这些位于解决方案之外的中心位置,因此我可以在一个地方修补所有与 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 中进行。我只是手动打乱它们并.sln在 Notepad++ 中编辑文件。NP++ 对于编辑项目文件也很方便。VS 只是在您更改项目时重新加载项目,除非您破坏它们。我提到源代码控制了吗?

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

于 2012-11-09T09:36:31.210 回答