Is there a single MSBuild and TFSBuild variable th

2019-02-22 00:12发布

问题:

Is there there a property that can be used in either a Visual Studio build or a TFS build that will always point to where the binaries are?

Meaning that when I build in Visual Studio it will point to C:\MySolution\MyProject\bin\Release and in a TFS Build it will point to C:\Build\Path\MySoution\Binaries

And if there is not one, why not? This seems like a common, basic need/feature.

回答1:

There is an $OutDir property, which you can use in things like post-build events.

In a VS2010 build, it will be a relative path from the current project to the binaries, so it will be "bin\Debug\" for example. (The full path to the output is $TargetDir, which is $(ProjectDir)\$(Outdir)).

$OutDir is overriden during TFS builds to point to the path where it puts your binaries:

 <OutDir Condition=" '%(ConfigurationToBuild.PlatformToBuild)' != 'Any CPU' ">$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)\</OutDir>
 <OutDir Condition=" '%(ConfigurationToBuild.PlatformToBuild)' == 'Any CPU' ">$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\</OutDir>

EDIT:

To get a full path in either case, one option you could use is something like this:

IF '$(BuildingInsideVisualStudio)'=='true' (
  COPY SomeFile $(TargetDir)$(OutDir)
) ELSE (
  COPY SomeFile $(OutDir)
)