Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将t4类签入源代码管理?_C#_T4 - Fatal编程技术网

C# 将t4类签入源代码管理?

C# 将t4类签入源代码管理?,c#,t4,C#,T4,我想使用t4在运行时生成一些文本。我创建了一个“运行时文本模板”。我注意到有一个.cs文件是从.tt文件生成的。我试图弄清楚这是否是源代码管理中的正常检查。通常我不会签入生成的文件。此文件有一个#行指令,其中包含本地计算机上文件的完整路径。检查这个似乎很有趣,因为在我队友的机器上显然不一样 是的,您需要将其签入源代码,因为如果您不签入源代码,很可能会导致其他开发人员中断构建。尽管他们可以自己运行T4模板,但这不应该由他们来完成。另一个相关的原因是如果你有一些构建工具,比如巡航控制,它可能无法运行

我想使用t4在运行时生成一些文本。我创建了一个“运行时文本模板”。我注意到有一个.cs文件是从.tt文件生成的。我试图弄清楚这是否是源代码管理中的正常检查。通常我不会签入生成的文件。此文件有一个
#行
指令,其中包含本地计算机上文件的完整路径。检查这个似乎很有趣,因为在我队友的机器上显然不一样

是的,您需要将其签入源代码,因为如果您不签入源代码,很可能会导致其他开发人员中断构建。尽管他们可以自己运行T4模板,但这不应该由他们来完成。另一个相关的原因是如果你有一些构建工具,比如巡航控制,它可能无法运行T4模板,也无法再构建项目。

您对.cs文件中的文件名的担心是非常有效的,但在这种情况下,它是
#行的一部分
,它只是告诉编译器在处理此文件时在输出中打印哪个文件名

编辑:从OP中找到了不错的结果-对于VS 2012,您可以在模板中添加以下指令以删除LinePragmas。进一步讨论


一般来说,我只喜欢在文件

  • 另一个开发人员或生成代理生成代码时需要
  • 部署
  • 用作文件或类似用途

  • 我一直不理解您的问题,但是如果您担心意外检入该文件,请在生成该文件后将其从源代码管理中排除。对TFS来说就是这样:不担心意外地签入它。我想知道使用t4签入生成的.cs文件时是否常见,或者是否应该在我队友的计算机上重新创建.cs文件我个人使用t4生成自定义实体框架模型代码,我确实签入了它。每个人都使用它,尽管生成的类没有到本地环境的链接。t4只是您手中的一个有用工具,用于生成大量表示特定模板(实体框架实体对象)的代码,如果更改模板,您将重新生成代码(根据特定条件,某些实体对象现在将实现ICustomInterface)在每个环境中,可以有一个指向环境变量的链接,而不是硬编码的值。每个开发人员都会配置该变量。或者,您可以向项目中添加预构建操作,以执行从系统检索该值的特定批处理,并创建一个包含常量字符串的简单.cs文件。该文件在项目中应具有引用,但从tfs中排除。揭示您价值的含义,我们将更容易提供解决方案。是的,但生成的文件包含位于本地计算机上的文件的完整路径,这难道不奇怪吗?我觉得很奇怪,同意。但是.cs文件中的那一行只是告诉编译器在输出中输入什么文件名。它实际上不用于模板。啊,有一个名为“linePragmas”的属性,我可以设置为false。这将同时删除#line编译器指令。在文档中,“如果您在pragmas中发现绝对文件名会导致源代码控制下的分散注意力的合并,那么该属性也会有所帮助。”很好!我会把它添加到我的答案中,这样其他人会发现它很有用。我们刚刚在项目中发现这是真的,但我们讨厌它。签入生成的文件在道德上是破产的,并且众所周知会在以后的生活中造成麻烦,总有一天你会明白的,但到那时就太晚了。太晚了。(VS需要的是一个“编译时模板”概念,所以每个msbuild都会更新它。)哦,好吧!
    <#@ template language="C#" linePragmas="false" #>