首页 > 编程 > .NET > 正文

.NET工程的自动化编译

2024-07-10 13:11:25
字体:
来源:转载
供稿:网友

星期六去了一趟海龙,内存终于升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的深谋远虑!!!

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

----《最后期限》

的确是一句名言!!!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表