从源代码管理中排除嵌套项

时间:2010-07-05 10:05:12

标签: visual-studio-2008 tfs t4 version-control

我正在使用T4模板在我正在处理的项目中生成一些.config文件。

我已经设置了一个预构建任务来查找解决方案目录中的所有.tt文件,然后执行TextTransform命令行工具,以便在每次构建时新生成代码。

但是,我现在有“拒绝访问”错误,因为(例如)当它尝试在Web.UAT.tt文件上执行TextTransform时,Web.UAT.Config文件在TFS中的源代码控制下,因此写保护。

通常我会在Visual Studio中选择.Config文件,然后执行File-> Source Control-> Exclude From Source Control。不幸的是,对于任何在另一个文件下显示为“嵌套”的文件,这似乎不是一个选项!

即。我可以排除web.tt,但不能排除web.config ...我可以排除default.aspx但不能排除default.aspx.cs。

有没有人对如何从源代码管理中排除较低级别的嵌套文件有任何想法,但保持顶级文件?

谢谢!

2 个答案:

答案 0 :(得分:2)

我假设你在这里使用TFS。

您无法完美地完成此操作 - 因为Visual Studio会自动将添加到项目中的任何新项目添加到源代码管理中。您最好的解决方案是在运行模板之前查看使用MSBuild并为输出文件发出签出(但之后您可能需要再次签入)。快速浏览一下http://msbuildextensionpack.codeplex.com/我已经看到过这样做的目的。

如果做不到,还有另一种方法。

  • 从源代码控制中删除输出.config文件并签入(最好使用Source Control Explorer)。
  • 从VS中手动运行.tt,它会再次添加文件 - 它旁边应该有一个加号。
  • 再次在Source Control资源管理器中,右键单击此“新”文件并选择“撤消待处理的更改”。您现在将文件放在磁盘上,但不在源代码管理中。
  • 现在TT可以运行,文件是项目的一部分(因此将被发布或其他),但它不受源代码控制。

这个问题将是其他人第一次加载项目,他们的Visual Studio会在运行.TT时自动创建输出文件 - 在这种情况下,他们要么需要重复这个过程(从步骤开始) 2)或者需要手动创建一个正确名称的stub .config文件(我甚至会在加载项目之前建议),以便项目看到它并且不会尝试重新控制它。

答案 1 :(得分:2)

好的......我使用了Andras Zoltan答案的改编版本。

基本上,我最终做的事情如下:

  1. 单击Visual Studio中的.tt文件,并将“属性”中的“自定义工具”行更改为空白。这将从解决方案中删除.config文件。
  2. 在解决方案中添加一个新的空白项,调用.tt的输出文件(因此,Web.UAT.tt - > Web.UAT.config)。
  3. 选择新添加的文件,并将其从源代码管理中正常排除(文件 - >源代码管理 - >排除)。
  4. 现在,在构建时,您应该在解决方案中看到新生成的文件,但没有任何签入或签出。

    这种方法有几个缺点。首先,您必须为项目中的每个.tt文件执行此操作,并确保任何其他开发人员都这样做。其次,您现在可以通过构建生成输出文件!

    我认为从长远来看,我可能会接受Andras的建议,并编写某种MSBuild脚本来检出并检查输出文件,或者至少使用<删除“只读”标志。 Attrib&gt ;.

    谢谢!