设置以了解是否正在从命令行或IDE

时间:2015-08-05 22:33:53

标签: msbuild

我有一个Visual Studio 2012 VC ++项目(可执行文件),它使用来自另一个VC ++项目的dll。当我添加以下代码时,它在IDE上成功构建 项目 - >构建事件 - >预建活动

call setupdll.bat

其中 setupdll.bat 将dll的环境变量设置为

set COMSPEC = "%VCINSTALLDIR%\vcvarsall.bat" amd64
setx PATH "..\..\lib\libsndfile;..\..\lib\simulink" 

唯一需要注意的是,一旦项目构建完毕,我需要关闭VS IDE,再次重新打开以便能够成功运行项目,因为下一个会话中会发生指定路径的环境变量添加。

现在,当我需要在没有安装Visual Studio的构建服务器上构建解决方案时,我执行批处理脚本" MySol.bat "使用msbuild.exe进行构建过程。但是,在这种情况下,我不包括" setupdll.bat "在Project属性Project-> Build Events->预建活动
而是执行以下作为" MySol.bat "的一部分

PATH=%PATH%;"..\..\lib\libsndfile;..\..\lib\simulink"

这也很好用。 但是,这意味着每次我必须使用IDE构建解决方案时,我都会包含" setupdll.bat "文件在属性中,而在构建服务器上,我没有。
我尝试了以下解决方案 StackOverflow Duplicate question

但它不起作用。 具体来说,我做了以下 修改了项目xml以添加属性" FromVS "

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_File|x64'">
<FromVS>true</FromVS>
<TargetExt>.exe</TargetExt>
<OutDir>$(Platform)\$(Configuration)\</OutDir>
<PreBuildEventUseInBuild>true</PreBuildEventUseInBuild>

当我调用VS IDE时,我将PREbuildEvent修改为

<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_File|x64'">
<PreBuildEvent>
  <Command>call setupdll.bat Condition="$(FromVS)"</Command>
</PreBuildEvent>

当从&#34; MySol.bat &#34;进行呼叫时,我使用

call %MSBuildToolsPathVS%/msbuild %SolfilePath%  /p:configuration=debug_File;Platform=x64;FromVS=false^ 


/t:build

但是,当我从MSbuild构建时,我仍然可以看到它 &#34; setupdll.bat &#34;叫做。 我正在做什么事情或者我需要更改其他设置吗? 还有其他建议吗?

感谢
Sedy

0 个答案:

没有答案