2009-05-08 6 views
29

ho due problemi simili:Macro/Ambiente variabile .sln e file .vcproj per Visual Studio

a) Ho una soluzione che comprende diversi progetti e voglio essere in grado di passare facilmente posizione progetto impostando alcuni variabile d'ambiente/macro. Ad esempio questo progetto può essere localizzato in \ SolutionDir \ Dir1 \ o \ SolutionDir \ Dir2 \ Quindi, voglio specificare che dovrebbe trovarsi in \ SolutionDir \ $ (Var) e impostare semplicemente la variabile.

C'è qualche build in Visual Studio per farlo?

Attualmente conosco solo due soluzioni: modifica il file .sln manuale/programmatico per trovare questo progetto e impostare il percorso corretto.

Non è stato possibile utilizzare la variabile di ambiente nel file .sln.

b) Ho un progetto che include risorse (file .rc e .h). Voglio essere in grado di impostare la loro posizione attraverso altre variabili d'ambiente o macro.

Qualcosa di simile \ ProjectDir \ $ (Var2) \ resource.rc

ho trovato alcune informazioni promettente finestre delle proprietà, ma lo studio visivo non si espande le macro quando io li sto usando in tag file nella .vcproj .

Grazie per qualsiasi idea su come risolvere questo problema.

saluti, Victor

+0

interessante. Ma non riesco a capire perché vuoi farlo. C'è probabilmente un modo diverso per risolvere il problema che stai cercando di risolvere. – Tim

+0

Desidero configurare il progetto in modo che sia facilmente commutabile tra versioni di prodotto di marca per diversi OEM. –

risposta

17

penso di avere lo stesso obiettivo di te: voglio utilizzare variabili di ambiente per individuare alcuni progetti in un file di soluzione (sln) e di utilizzare alcune variabili d'ambiente per individuare alcuni file nei miei progetti.

Ho trovato un modo per farlo e funziona bene per me (con Visual Studio 2005): - modificare il file sln con un editor di testo e utilizzare le variabili di ambiente con la seguente sintassi% MyEnvironmentVariable% - modificare il File .vcproj e sostituire il percorso con i file desiderati con alcune variabili, con la seguente sintassi $ (MyEnvironmentVariable).

Speranza che aiuta ... Cyrille

+1

Questo è proprio quello che stavo cercando, non lo sapevo.sln usa la sintassi% VAR%, sto usando $ (VAR) che funziona in .scproj. Grazie! – watbywbarif

+0

Tieni presente che l'introduzione di variabili in un file .sln significa che non possono essere utilizzati con MSBuild. Vedi Vedi https://connect.microsoft.com/VisualStudio/feedback/details/690318/msbuild-doesnt-parse-environment-variables-in-sln-files – cowlinator

2

Il modo migliore per ottenere ciò che si descrive in b) è quello di utilizzare fogli di proprietà. Dai un'occhiata anche a questo similar question.

ho trovato alcune informazioni promettente finestre delle proprietà, ma lo studio visivo non si espande le macro quando sto usando loro nel tag file nella .vcproj.

Non sono sicuro di quale versione di VS utilizzi. VS2008 consente di definire ad esempio una directory di inclusione come questa: "$ (OpenCVInclude) \ cxcore \ include". Io lo uso per tutto il tempo. OpenCVInclude è una macro definita in una finestra delle proprietà.

Per quanto riguarda la domanda a), penso che non ci sia un modo "pulito" per fare ciò che vuoi. In alternativa è possibile utilizzare il Configuration Manager:

  • Includere tutti i progetti nella soluzione.
  • Denominare il progetto in modo diverso, ad esempio in base all'OEM.
  • Per ogni progetto definire le configurazioni di rilascio e debug nella soluzione
  • In "Build-> Configuration Manager" È possibile selezionare o deselezionare la colonna "Build" per ogni configurazione. Controlla "build" per il progetto pertinente.
0

(a) Cyrille offre una soluzione decente a ciò che hai richiesto. Un altro modo è quello di mantenere le impostazioni modificabili in un posto comune. Nota che questo non funzionerà con i file non-msbuild come * .sln e * .vcproj (fino a VS 2010).

file di progetto: ... $ (ChangeableDir) \ foo.cs

Common.targets: ChangeThis ...

Tuttavia, I don' Penso che questo sia un ottimo modo per fare le cose. Se le differenze tra ciò che stai creando sono grandi funzionalità, dovresti prendere in considerazione la creazione di un ramo nel tuo sistema di controllo del codice sorgente. OTOH, se le differenze sono minori - ad esempio stringhe hardcoded - allora questo porta alla tua seconda domanda ...

(b) Il tipo di gestione delle risorse che descrivi è essenzialmente lo stesso problema che affligge i localizzazione loro progetto in diverse lingue Per fortuna, il sostegno diretto è integrato in Visual Studio dal 2005. Scopri le domande precedenti, come: Localization in Visual Studio 2008

21

basta usare la variabile d'ambiente nel campo di verifica:

OutputDirectory="$(MyEnvVariableName)\Bin" 

Un trucco è che è necessario riavviare Visual Studio IDE ogni volta che si modifica la variabile.

C'è un articolo di MSDN proprio su questo: How to: Use Environment Variables in a Build

1

Non sono sicuro se si sta costruendo solo i progetti C++ o se si sta anche costruendo progetti C# \ VB, ma una delle grandi cose di Visual Studio è tutti i progetti sono in realtà solo progetti MSBuild. Se modifichi un progetto in un editor di testo, vedrai che alla fine del progetto importa un file .targets. Se rintracciare e trovare seguire le importazioni, scoprirai che quasi tutti i progetti VS importano Microsoft.Common.Targets. Microsoft.Common.Targets importa Custom.Before.Microsoft.Common.Targets. Usando questa importazione puoi importare il tuo file target con le tue azioni personalizzate.

Ad esempio, ho un file di destinazione che ha una proprietà comune definita in tutti i progetti in una soluzione e un evento di post-generazione personalizzato che viene elaborato alla fine di ogni edificio del progetto.

Utilizzando questo metodo di estensione e creando configurazioni personalizzate nella soluzione oltre alla versione standard \ debug, dovresti essere in grado di creare il complesso di una configurazione di build di cui hai bisogno.