是否有可能检测到何时在VS IDE中构建?

时间:2010-02-22 19:23:05

标签: visual-studio msbuild

我添加了一个额外的构建步骤,以便我可以将mspec与teamcity集成。但是,当我在IDE中构建时,我不想运行它,因为它会延长构建时间。有没有我可以检测我是否从IDE构建并且不执行此特定目标?这是我到目前为止所做的。

<Target Name="RunSpecs">
    <PropertyGroup>
        <AdditionalSettings>--teamcity</AdditionalSettings>
        <MSpecCommand>..\Lib\mspec\mspec.exe $(AdditionalSettings) "$(TargetDir)$(AssemblyName).dll"</MSpecCommand>
    </PropertyGroup>
    <Message Importance="high" Text="Running Specs with this command: $(MSpecCommand)" />
    <Exec Command="$(MSpecCommand)" IgnoreExitCode="true" />
</Target>
<Target Name="AfterBuild" DependsOnTargets="RunSpecs" />

简单的解决方案是添加另一个构建配置,但我不想这样做。

将TeamCity输出转储到输出窗口也很烦人。 :)

1 个答案:

答案 0 :(得分:9)

是的,您可以查看属性BuildingInsideVisualStudio

因此,在您的情况下,您可以执行以下操作:

<Target Name="RunSpecs" Condition=" '$(BuildingInsideVisualStudio)'!='true' ">
    <PropertyGroup>
        <AdditionalSettings>--teamcity</AdditionalSettings>
        <MSpecCommand>..\Lib\mspec\mspec.exe $(AdditionalSettings) "$(TargetDir)$(AssemblyName).dll"</MSpecCommand>
    </PropertyGroup>
    <Message Importance="high" Text="Running Specs with this command: $(MSpecCommand)" />
    <Exec Command="$(MSpecCommand)" IgnoreExitCode="true" />
</Target>

注意目标上的条件。仅供参考,我通常advise against putting condition on targets,但这对他们来说是一个很好的用法。