none
用Microsoft.Build.Evaluation里的Project构建项目时,程序未响应

    问题

  • 最近自己想做一个项目自动发布的平台工具,其中涉及到对一个解决方案进行编译的流程。目前使用的方案是通过引用Microsoft.Build.Evaluation命名空间,将待编译的项目实例化成Project类后,调用project.Build()方法。具体代码如下:

            /// <summary>
            /// 编译指定项目
            /// </summary>
            /// <param name="config">编译配置</param>
            public static bool BuildProject(BuildConfig config)
            {
                // 项目的 *.csproj 文件
                var csprojFilePath = Path.GetFullPath(config.WorkDirectoryPath + config.ProjectPath);
                var project = new Project(csprojFilePath);
    
                // 定义一个事件记录器
                var logger = new ConfigurableForwardingLogger
                {
                    Verbosity = LoggerVerbosity.Normal
                };
                // 初始化记录器,config.EventSource 是一个继承了 IEventSource 的属性,实现记录事件用
                logger.Initialize(config.EventSource);
    
                /*
                 *  此处出现未响应的情况,程序不会再继续运行,但是没有任何报错,之前定义的记录器事件也没有执行。
                 *  但是如果不用 ConfigurableForwardingLogger 类,使用其他的ILogger(比如ConsoleLogger),那么执行一切正常,控制台上立马会出现编译信息,且编译成功。
                 */
                return project.Build(logger);
            }
    

    用vs2015的诊断工具看了一下,当断点进入project.Build()后,五六分钟内内存和CPU均无波动,而且断点始终没有出来。

    请各位老师帮忙看看这个可能是哪里的问题。谢谢:)

    2015年12月13日 14:52

答案