.NET工程的自动化编译

编译

星期六去了一趟海龙,内存终于升G了,下午回来看了一会儿.NET的msdn帮助,发现

DTE,觉得对大团队自动化编译很有利用价值了,就想写点东西出来!

通过这个接口很容易实现VC7的工程编译自动化,什么也不说了, 一切尽在代码中!

MSDN中描述DTE结构的示意图如下:

VC7.1的代码如下:

#pragma warning( disable : 4278 )

//The following #import imports DTE based on its LIBID

#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("7.0") lcid("0") raw_interfaces_only named_guids

#pragma warning( default : 4278 )

using namespace EnvDTE; // optional

//……

void Ct3Dlg::OnBnClickedOk()

{

      CoInitialize(NULL);

      {

           _variant_t varRelease=L"Release";

        _bstr_t    bstrSlnPath=L"C:\\test\\W3\\W3.sln";

           try

           {

                 CComPtr<EnvDTE::_DTE> pZFIVE5_DTE;

                 _Solution  *pZFIVE5_S=NULL;

                 SolutionBuild *pZFIVE5_SB=NULL;

            SolutionConfigurations *pZFIVE5_SCs=NULL;

                 SolutionConfiguration *pZFIVE5_SC=NULL;

                 pZFIVE5_DTE.CoCreateInstance(L"VisualStudio.DTE.7.1", 0);

                 pZFIVE5_DTE->get_Solution(&pZFIVE5_S);

                 if(pZFIVE5_S==NULL)

                 {

                      pZFIVE5_DTE->Quit();

                      goto ZFive5ComRet;

                 }

                 pZIVE5_S->Open(bstrSlnPath);

                 VARIANT_BOOL var;

                 pZFIVE5_S->get_IsOpen(&var);

                 if (var==VARIANT_TRUE)

                 {

                      pZFIVE5_S->get_SolutionBuild(&pZFIVE5_SB);

                      if(pZFIVE5_SB==NULL)

                      {

                            pZFIVE5_S->Release();

                            pZFIVE5_S=NULL;

                          pZFIVE5_DTE->Quit();

                            goto ZFive5ComRet;

                      }

                      pZFIVE5_SB->get_SolutionConfigurations(&pZFIVE5_SCs);

                      if(pZFIVE5_SCs==NULL)

                      {

                            pZFIVE5_SB->Release();

                            pZFIVE5_SB=NULL;

                            pZFIVE5_S->Release();

                            pZFIVE5_S=NULL;

                            pZFIVE5_DTE->Quit();

                            goto ZFive5ComRet;                          

                      }

                      pZFIVE5_SCs->Item(varRelease,&pZFIVE5_SC);

                      if(pZFIVE5_SC!=NULL)

                      {

                         pZFIVE5_SC->Activate();

                         pZFIVE5_SC->Release();

                         pZFIVE5_SC=NULL;

                      }

                      pZFIVE5_SCs->Release();

                      pZFIVE5_SCs=NULL;

                      pZFIVE5_SB->Build(VARIANT_TRUE);

                      pZFIVE5_SB->Release();

                      pZFIVE5_SB=NULL;

                      pZFIVE5_S->Close(0);

                 }

                 else

                 {

                      AfxMessageBox("打开工程错误!");

                 }

                 pZFIVE5_S->Release();

                 pZFIVE5_S=NULL;

                 pZFIVE5_DTE->Quit();

           }

           catch(...)

           {

                      AfxMessageBox("接口调用错误!");

           }

      }

ZFive5ComRet:

      ::CoUninitialize();

      return;

}

写到这里不能不佩服ms的深谋远虑!!!

除非感到安全,否则人们就不能去迎接变化。

----《最后期限》

的确是一句名言!!!

时间: 2024-08-09 17:49:15

.NET工程的自动化编译的相关文章

关于VC实现dll/exe自动化编译版本的脚本实现

问题描述 关于VC实现dll/exe自动化编译版本的脚本实现 windows下VC生成dll/exe的版本是通过编辑资源文件的方式,请问能否实现在.h文件里定义版本,然后通过编译脚本把.h定义的版本信息自动修改到资源文件.这样编译完成后,就生成了在.h指定的版本.哪位大侠能够提供这样的脚本? 解决方案 定义在 .h 中然后在 版本 中显示? 写个程序自动修改资源中的版本信息,然后再编译.可以通过 DATE 和 TIME 来输出编译时间. 解决方案二: 感谢你的回答.情况是这样的:对于同一个模块(

iar-嵌入式新手求教,在IAR下对两个工程合并,编译出现未知错误。。

问题描述 嵌入式新手求教,在IAR下对两个工程合并,编译出现未知错误.. 我是嵌入式刚开学的新手 在我们嵌入式课程上面,我们通过IAR对NXP LPC2478进行开发和编译学习.. 课程中收到了一些实验例程,其中就包括LCD 和 SD卡读取的相关例子.. 在学习中,我希望把SD卡读写和LCD显示整合在一起,能实现读取SD卡中数据显示在LCD屏幕的功能.. 在两个工程合并中,我用LCD的例子为基础,依次添加SD卡中相关的.c文件和.h文件...在添加SD卡的例子过程中,出现的未知错误,添加mmc.

图像处理-cmake编译的opencv3.0.0生成的工程无法通过编译

问题描述 cmake编译的opencv3.0.0生成的工程无法通过编译 我在windows下用cmake-gui编译opencv3.0(联合opencv contrib master), 生成的工程Opencv.sln在build的时候出现了许多下列类似的错误: 请问这是什么原因呢? 系统是windows10,vs2013 解决方案 http://www.opencv.org.cn/archiver/?tid-35547.html 解决方案二: http://www.nmtree.net/201

c语言-Linux下C语言项目,怎么基于不同宏值定义组合,自动化编译

问题描述 Linux下C语言项目,怎么基于不同宏值定义组合,自动化编译 一个Linux下的C语言项目,希望通过Macro实现每个功能模块都能自由打开/关闭,例如: #define FEATURE_A 1 // 如果想关闭Feature_A,请定义为0 #define FEATURE_B 1 // 如果想关闭Feature_B,请定义为0 #define FEATURE_C 1 // 如果想关闭Feature_C,请定义为0 默认情况下,Feature A/B/C都是打开的,也就是都定义为1.但是

mingw-主工程是MSVC2010编译的,使用MinGW编译的库却会报错?

问题描述 主工程是MSVC2010编译的,使用MinGW编译的库却会报错? 我用Qt_4_8_0_for_Desktop_-_MinGW编译了一个动态库:qextserialportd.dll, 然后我的主工程使用qextserialportd.dll: pro文件中LIBS += ../LeadEDM/SerialPort/qextserialportd.dll,并把qextserialportd.dll和相应头文件都放入工程目录中 再然后使用Qt_4_8_0_for_Desktop_-_MS

基于C++自动化编译工具的使用详解_C 语言

@echo off  title=HYTradingGateway自动化编译打包工具mode con cols=80 lines=40echo -------------------------------------------------------------echo 使用说明echo.                                                             echo HYTradingGateway自动化编译打包工具.修改echo 使用前提

BuildBot 0.8.4p2发布 自动化编译/测试周期工具

BuildBot是一个系统的自动化编译/测试周期工具,大多数软件项目需要验证码的变化.它可以构建和测试致力于每一个变化时,通过网页或其他协议提供状态更新. BuildBot 0.8.4p2这是一个修正错误的修订版在0.8.4p1基础上.修复新闻文件的完整列表程序及围绕中心的报告,mergeRequests,像"checkconfig"和"try"实用程序等. 下载地址: Master &http://www.aliyun.com/zixun/aggregat

BuildBot 0.8.6p1发布 自动化编译/测试周期工具

BuildBot 是一个采用持续http://www.aliyun.com/zixun/aggregation/15149.html">集成系统设计的系统自动化编译/测试周期的工具,通过大多数软件项目来验证代码的变化.它可以构建和测试树提交的每一个变化,通过网页或其他协议提供状态8206.html">实时更新. BuildBot 0.8.6p1是0.8.6的一个bug修正版本,在很大程度上做了改善.更新的包含Web UI, IRC, MailNotifier, proper

BuildBot 0.8.6发布 自动化编译/测试周期工具

BuildBot 是一个采用持续http://www.aliyun.com/zixun/aggregation/15149.html">集成系统设计的系统自动化编译/测试周期的工具,通过大多数软件项目来验证代码的变化.它可以构建和测试树提交的每一个变化,通过网页或其他协议提供状态8206.html">实时更新. BuildBot 0.8.6该版本主要进行了一些改善,很多构建灵活的配置的更新.包含了Web UI.IRC.MailNotifier.属性和网络挂钩的变化,一些错误