代码之家  ›  专栏  ›  技术社区  ›  Antony Scott

t4mvc似乎正在丢失它已经生成的代码

  •  3
  • Antony Scott  · 技术社区  · 14 年前

    我有一个问题是t4mvc会丢失它每次更新SVN时生成的代码。我可以通过删除.generated.cs文件并重新运行模板来修复它。但事实证明这有点令人厌烦。我有什么东西不见了吗?


    首先是一些背景信息…

    我正在使用C_v4、VS2010和ASP.NET MVC2。我使用Subversion进行源代码管理。我还在VS2010中运行许多加载项和扩展…

    • Huagati DBML.EDMX工具
    • zippy.chirp(用于自动运行t4mvc模板)
    • RESHARPER V5
    • 视觉矢量网
    • 对齐工作分配
    • ASP.NET OpenID网站
    • 大括号完成符(禁用)
    • 代码4博客
    • 德弗莱克
    • 突出显示所选单词的所有匹配项(禁用)
    • 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

    我现在正在更新我的工作副本,方法是右键单击解决方案资源管理器中的根节点并选择 更新 从上下文菜单的视觉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)做了这个。然后我尝试与本地副本进行比较,并收到以下错误消息…

    找不到'c:/data'的存储库位置 文件/项目/web/bybox.vanventory/bybox.vanventory/homecontroller.generated.cs' 修订版14638


    哇-坚持住!

    今天早些时候,当我意识到树冲突的原因是生成的文件实际上正在被删除并重新添加到项目中时,我已经了解到了这一点。现在,我不知道t4mvc本身是在做这个,还是在做欢快的扩展。我浏览过Chirpy的源代码(只是在CodePlex上的Web浏览器中浏览),但它似乎没有做到这一点。

    我认为 树冲突 在Subversion中,有两个人都对控制器进行了更改,这导致我们两个都生成了具有相同文件名的新文件。因此,Subversion有2个新文件,并将其标记为 树冲突 因为它不知道该怎么办。

    我已经和一位同样使用T4MVC的同事确认,他们对它没有任何问题,但他们是唯一更改控制器代码的人。在我的项目有两个人之前,我从来没有遇到过问题。自从第二个人开始处理这个项目并对控制器代码进行更改之后,这个问题就出现了。


    那么,我是在错过一些显而易见的东西,还是在滥用t4mvc和/或叽叽喳喳?

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


    编辑

    为了澄清这一点,我希望能够在早上打开Visual Studio,进行SVN更新(通过VisualVN),并且不必花费任何时间来构建它,因为昨天生成的文件中缺少代码。

    那么,模板/t4mvc在Visual Studio中的工作原理是什么?

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

    3 回复  |  直到 11 年前
        1
  •  1
  •   Damian Powell    14 年前

    我不认为这是快活或者T4MVC的直接责任。我认为问题的根源是t4,因为Visual Studio处理代码生成的方式。

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

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

        2
  •  1
  •   Antony Scott    11 年前

    我关掉了“快跑”功能,一切都好起来了。我不想在我需要的时候手动运行它。它仍然在我建造的时候运行,这可以满足我99%的需求。

        3
  •  0
  •   nportelli    12 年前

    我知道这是个老问题,但我们也有类似的问题。我认为这应该归咎于视觉效果。我在Visual Studio中使用ankh,只允许它在我通过Visual Studio添加文件时向SVN添加文件。据我所知,我从未见过tortiossvn想要删除某个总是从repo中删除的t4mvc文件。

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