2012-02-03 3 views
7

Esiste una proprietà che può essere utilizzata in una build di Visual Studio o in una build TFS che punta sempre a dove sono i binari?C'è una singola variabile MSBuild e TFSBuild che punterà a dove sono i binari?

Il che significa che quando costruire in Visual Studio si punterà a C: \ MySolution \ MyProject \ bin \ Release e in un TFS Costruire punterà a C: \ Costruire \ percorso \ MySoution \ Binaries

E se non ce n'è uno, perché no? Questo sembra un comune bisogno/funzionalità.

risposta

8

C'è una proprietà $OutDir, che è possibile utilizzare in cose come eventi post-build.

In una build VS2010, sarà un percorso relativo dal progetto corrente ai binari, quindi sarà "bin \ Debug \", ad esempio. (Il percorso completo dell'output è $ TargetDir, che è $ (ProjectDir) \ $ (Outdir)).

$ OutDir viene sovrascritto durante TFS build per indicare il percorso in cui si mette i binari:

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

EDIT:

Per ottenere un percorso completo in entrambi i casi, una possibilità che si potrebbe usare è qualcosa del genere:

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

Ma outdir è relativo. Mi piacerebbe davvero un percorso completo. Se nella tua soluzione sono presenti progetti in sottodirectory, un percorso relativo diventa difficile da utilizzare. – Vaccano

+0

Non sono sicuro di dove sia necessario utilizzare questa proprietà, quindi è difficile dare una risposta migliore; in un evento post-build, ad esempio, la proprietà sarà relativa a qualunque progetto sia in esecuzione. Aggiornerò la mia risposta con un modo per ottenere un percorso completo in entrambi i casi. –