我在每次执行 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 以及多人处理生成的代码的代码不符添加到)