【问题标题】:SubSonic 3 Regenerate ActiveRecord Class Automatically?SubSonic 3 自动重新生成 ActiveRecord 类?
【发布时间】:2009-07-17 04:10:51
【问题描述】:

我有一个 SQLite 数据库和 SubSonic3,终于知道了如何在 Visual Studio 中从 .tt 生成 .cs。我的东西现在正在构建。

我可以自动启动 MSBuild 来构建我的项目,但我想添加一个预构建事件来干净地重新生成 ActiveRecord.cs,以便任何数据库更改最终都会出现在未来的单元测试中。

如何在 Visual Studio GUI 中模拟“运行外部工具”?

谢谢。

【问题讨论】:

    标签: activerecord msbuild subsonic3


    【解决方案1】:

    您可以从命令行运行 TextTemplating 工具:

    C:\Program Files\Common Files\Microsoft Shared\TextTemplating\1.2\TextTransform.exe "path/to/your/ttfile.tt" -out <outFileName>
    

    使用TextTransform.exe /help 获取更多可以使用的命令行参数。

    【讨论】:

    • SubSonic 要求您从 visualstudio 中运行它的 t4 模板,因此您无法从命令行成功运行它们。
    • 我不明白为什么 SubSonic 需要这个。我找到了这个链接,但不确定它是否也适用。 geekswithblogs.net/EltonStoneman/archive/2008/07/25/…
    【解决方案2】:

    此时,SubSonic 的 Settings.ttinclude 文件必须在 VisualStudio 应用程序中运行,不能从命令行运行。这是因为 Settings.ttinclude 使用项目上下文来定位 App.config / Web.config 文件,以便它可以查找连接字符串。

    尝试使用 TextTransform.exe 通过命令行运行将导致错误:

    错误:运行转换:System.InvalidCastException:无法将“Microsoft.VisualStudio.TextTemplating.CommandLine.CommandLineHost”类型的对象转换为“System.IServiceProvider”类型。

    这源于Settings.ttinclude中的这个方法:

    public EnvDTE.Project GetCurrentProject()  {
        IServiceProvider _ServiceProvider = (IServiceProvider)Host;
        ...
    }
    

    【讨论】:

      【解决方案3】:

      通过破解 Settings.ttinclude 文件,您可以将 Subsonic 设置为从命令行运行。

      只需修改它以将您的连接字符串设置为 GetConnectionString 的返回值并取出所有其他逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多