2010-07-05 61 views
6

我正在使用T4模板在我正在处理的项目中生成一些.config文件。从源代码管理中排除嵌套项目

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

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

通常我会在Visual Studio中选择.Config文件,然后执行文件 - >源代码控制 - >排除源代码控制。不幸的是,对于任何显示为“嵌套”在另一个文件下的文件,这不会显示为一个选项!

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

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

谢谢!

+0

您使用哪个源代码管理提供程序? SourceSafe的?团队基金会?还有别的吗? – 2010-07-06 08:30:14

+0

TFS ...我将编辑问题更清楚。 – NeilD 2010-07-06 08:45:32

回答

2

我假设你在这里使用TFS。

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

失败了,还有另一种方法。

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

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

+0

谢谢安德拉斯。我已经使用了第二条建议的修改版本来解决问题。 – NeilD 2010-07-06 09:22:25

2

好的...我用了安德拉斯佐尔坦的答案的改编版本。

基本上,我落得这样做如下:

  1. 单击在Visual Studio中.TT文件,并更改属性中的“自定义工具”行是空白。这将从解决方案中删除.config文件。
  2. 向解决方案中添加一个新的空白项目,称为.tt的输出文件将是什么(如此,Web.UAT.tt - > Web.UAT.config)。
  3. 选择新添加的文件,并将其从源代码管理中正常排除(文件 - >源代码管理 - >排除)。

现在,当您构建时,您应该看到解决方案中新生成的文件,但没有任何签入或签出。

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

我认为长期的,我可能会采取安德拉斯的建议,并写一些MSBuild脚本检出和检查输出文件,或至少删除“只读”标志使用< Attrib>。

谢谢!

+0

其他人能看到更好的方式吗?我错过了哪些陷阱? – NeilD 2010-07-06 09:21:42

+0

一个狡猾的解决方案。然而,我遇到的问题是除了名称之外,两个文件之间不再有明确的联系;有些不熟悉TT技术的人可能会简单地编辑.config文件,然后想知道为什么他们的编辑没有完成。同样,熟悉TT的人也会想知道为什么这个层次结构不存在(并且可能会认为该项目已经失效!)。 的确,我的第二个解决方案还需要与团队的其他成员进行一些沟通;但一旦加载一切看起来很正常。 我猜如果它有效,那就去吧。 – 2010-07-06 10:19:05

相关问题