3

我在每次执行 SVN 更新时都会丢失 T4MVC 生成的代码。我可以通过删除 .generated.cs 文件并重新运行模板来修复它。但事实证明这有点令人厌烦。有什么我想念的吗?


首先是一些背景信息......

我正在使用 C# v4、VS2010 和 ASP.NET MVC2。我使用颠覆来进行源代码控制。我还在 VS2010 中运行了许多加载项和扩展...

  • 华加帝 DBML.EDMX 工具
  • Zippy.Chirp(用于自动运行 T4MVC 模板)
  • 锐器 v5
  • 视觉SVN
  • 对齐作业
  • ASP.NET OpenID 网站
  • 大括号完成器(已禁用)
  • Code4Blog
  • 开发颜色
  • 突出显示所选单词的所有出现(禁用)
  • HTML 拼写检查器(已禁用)
  • Lipsum 2010 - Lorem Ipsum 生成器
  • 适用于 Visual Studio 2010 的 PowerCommands
  • 生产力电动工具
  • 拼写检查器(已禁用)
  • Visual Studio 背景定制器
  • Visual Studio 颜色主题编辑器
  • VS10x 代码标记
  • VS 默认浏览器切换器的世界

我实际上是在写这个问题来更新我的工作副本并在每个阶段捕获我可以做的事情......

第1步

我已经打开了我的 IDE 来开始我一天的工作,在我更新我的工作副本之前,我已经收到了 4 个编译器警告......

Warning 1 The C# 2.0 and C# 3.5 compilers are no longer supported. Templates will always be compiled with the version 4 compiler instead of 'v3.5' as specified. C:\Data Files\Projects\Web\ByBox.Vanventory\ByBox.Vanventory\T4MVC.tt 18 4  
Warning 2 Compiling transformation: Unreachable code detected c:\Users\antony\AppData\Local\Temp\z04plrve.0.cs 1015 17  
Warning 3 Compiling transformation: Assuming assembly reference 'EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' matches 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a', you may need to supply runtime policy C:\Data Files\Projects\Web\ByBox.Vanventory\ByBox.Vanventory\T4MVC.tt 1 1  
Warning 4 Compiling transformation: Unreachable expression code detected c:\Data Files\Projects\Web\ByBox.Vanventory\ByBox.Vanventory\T4MVC.tt 968 33

第2步

我现在通过右键单击解决方案资源管理器中的根节点并从上下文菜单的 Visual SVN 部分选择更新来更新我的工作副本。

我的大多数 .generated.cs 文件都有树冲突......

  • HomeController.generated.cs(树冲突)
  • T4MVC.cs(树冲突)
  • T4MVC.ExplicitExtensions.cs(已删除,已添加)
  • GoodsInController.generated.cs(树冲突)
  • SharedController.generated.cs(已删除,已添加)
  • StockListController.generated.cs(树冲突)
  • StockCheckController.generated.cs(树冲突)
  • AuthController.generated.cs(树冲突)
  • GoodsOutController.generated.cs(树冲突)

第 3 步

我现在正在解决我的冲突。我怀疑这就是问题所在,因为我总是保留我的本地文件并将其标记为已解决。我刚刚为第一个冲突(HomeController.generated.cs)做到了这一点。然后我尝试与我的本地副本进行比较并收到以下错误消息...

在修订版 14638 中找不到“C:/Data Files/Projects/Web/ByBox.Vanventory/ByBox.Vanventory/HomeController.generated.cs”的存储库位置


哇——坚持住!

今天早些时候,当我意识到树冲突的原因是生成的文件实际上被删除并重新添加到项目中时,我就做到了这一点。现在,我不知道 T4MVC 本身是否正在执行此操作或 Chirpy 扩展。我查看了 Chirpy 的源代码(只是在我的 web 浏览器中浏览 codeplex),但它似乎没有这样做。

我认为颠覆中树冲突的原因是有两个人都对控制器进行了更改,这导致我们都生成了具有相同文件名的新文件。因此,subversion 有 2 个新文件并将其标记为树冲突,因为它不知道如何处理它。

我已经与一位也在使用 T4MVC 的同事确认,他们的问题为零,但他们是唯一更改控制器代码的人。在我的项目中有两个人之前,我从来没有遇到过问题。自从第二个人开始处理项目并更改控制器代码以来,问题就出现了。


那么,我是否在这里遗漏了一些明显的东西,还是我在滥用 T4MVC 和/或 Chirpy?

目前我有一个 hacky 解决方案。我编写了一个 powershell 脚本来“触摸”所有 controller.cs 文件。我已经把它放在我的 VS2010的外部工具中。当我遇到问题时,我运行那个 powershell 脚本,然后构建强制 T4MVC 模板运行的软件,我的所有错误都消失了。这并不理想,我希望它“正常工作”。


编辑

澄清一下,我想要的情况是能够在早上打开 Visual Studio,进行 SVN 更新(通过 VisualSVN)并且不必花费任何时间来构建它,因为生成的代码中缺少代码昨天在那里的文件。

那么,模板/T4MVC 的东西在 Visual Studio 中究竟是如何工作的呢?

(如果它删除生成的文件并在每次运行时重新创建它们,那么我将不得不停止使用它,因为这与使用 subversion 以及多人处理生成的代码的代码不符添加到)

4

3 回答 3

1

我不认为 Chirpy 或 T4MVC 是直接的罪魁祸首。我认为问题的根源在于 T4,因为 Visual Studio 处理代码生成的方式。

例如,我最近在更新服务参考时看到了类似的问题。生成文件的 Subversion 状态已替换为某些生成的文件。这意味着 Visual Studio(通过 Subversion 集成插件)告诉 Subversion 删除一个文件,然后添加一个具有完全相同名称的文件。

我认为除了确保您在进行任何会导致 T4MVC 重新生成其文件的更改之前和之后与您的同事协调之外,没有什么可以做的。不过,根据我对 T4MVC 的理解,这意味着每次修改控制器或添加新内容文件时都必须进行协调。

于 2010-09-03T07:28:53.760 回答
1

我关闭了啁啾的“智能运行”功能,现在一切都很好。我宁愿不必在极少数情况下手动运行它。它在我构建时仍然运行,并且满足了我 99% 的需求。

于 2010-10-08T09:02:23.420 回答
0

我知道这是一个老问题,但我们也有类似的问题。我认为应该归咎于 VisualSVN。我在 Visual Studio 中使用 ANKH,只是为了让它在我通过 Visual Studio 添加文件时将文件添加到 SVN。据我所知,我从未见过 TortioseSVN 想要删除某个 T4MVC 文件,该文件总是从 repo 中删除。

其他人都使用 VisualSVN。我不确定,但这是我唯一能想到的事情。

于 2012-09-14T15:53:57.947 回答