Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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# VIsual Studio插件在生成时运行T4_C#_Visual Studio 2010_Visual Studio_T4_Envdte - Fatal编程技术网

C# VIsual Studio插件在生成时运行T4

C# VIsual Studio插件在生成时运行T4,c#,visual-studio-2010,visual-studio,t4,envdte,C#,Visual Studio 2010,Visual Studio,T4,Envdte,如何通过插件在项目中运行T4文件?有什么提示/线索吗?我发现EnvDte文档特别稀少 我之所以使用此解决方案,是因为我需要在构建事件上运行T4模板。我不想在每次发生更改时手动运行自定义工具。我不能从命令行运行它,因为T4脚本引用了DTE对象,当从cmd行运行它时,它会吐出 我也考虑过使用宏,但是VS2012上没有宏,而且我的本地机器上有一个bug,阻止我启动宏IDE。因此,这不是一个好的短期/长期解决方案 最好的解决方案似乎是编写自己的插件,在构建时运行T4文件。就我所知: public voi

如何通过插件在项目中运行T4文件?有什么提示/线索吗?我发现EnvDte文档特别稀少

我之所以使用此解决方案,是因为我需要在构建事件上运行T4模板。我不想在每次发生更改时手动运行自定义工具。我不能从命令行运行它,因为T4脚本引用了DTE对象,当从cmd行运行它时,它会吐出

我也考虑过使用宏,但是VS2012上没有宏,而且我的本地机器上有一个bug,阻止我启动宏IDE。因此,这不是一个好的短期/长期解决方案

最好的解决方案似乎是编写自己的插件,在构建时运行T4文件。就我所知:

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    _applicationObject.Events.BuildEvents.OnBuildBegin += customBuildHander;

}

void customBuildHander(vsBuildScope Scope, vsBuildAction Action)
        {
            if (Scope == vsBuildScope.vsBuildScopeProject)
            {
                //Need to run steps 1 thru 3 here!
            }
        }
我需要以某种方式在上述代码中加入以下例程:

  • 查找项目中的所有T4文件
  • 在TT文件上运行T4,同时传递DTE对象,以便可以从T4文件访问它们

  • 还要声明环境变量,例如$(ProjectDir)因此,它们可以在T4脚本中读取如果您打算全部运行它们,您可能应该使用DTE基础设施调用IDE命令TransformAllTemplates来运行命令,而不是执行自己的遍历。

    我认为vscommands有一个选项可以这样做?您是否看到@AlexeiLevenkov是的,尝试了所有命令,但我的t4脚本在所有DTE和环境变量引用中都会呕吐。