Ottenere una destinazione per eseguire prima di tutto viene eseguito quando si costruisce da Visual Studio

StackOverflow https://stackoverflow.com/questions/1954670

Domanda

Sto cercando di ottenere una sola volta costosa destinazione per eseguire solo quando la costruzione di un certo progetto di primo livello (che ha molte dipendenze).

Non ho alcun problema su come ottenere questo lavoro dalla linea msbuild / plain di comando build. Lo faccio con impostazione e InitialTargets sul progetto, o in alternativa con

  

.

La parte difficile è con Visual Studio. Quando costruisco lo stesso progetto da VS. VS gestisce le dipendenze prima ancora di invocare il mio Csproj, quindi il mio obiettivo (che colpisce come gli altri progetti sono costruiti) non arrivare a correre fino a quando non sono già state costruite.

C'è qualche modo per forzare VS per eseguire un bersaglio prima di richiamare le dipendenze?

Al momento sto lavorando intorno a questo, eseguendo lo stesso obiettivo costoso dal mio progetto più basso livello (quello che ottengono ha sempre costruito ...) utilizzando:

  

condizione = "$ (BuildingInsideVisualStudio)"

Tutte le idee su come arrivare a questo fatto "correttamente"? Ancora una volta, sto cercando una soluzione che lavorano da VS.

È stato utile?

Soluzione

L'unico modo per fare questo (se ho capito la domanda) è quello di creare un progetto fittizio, che informi VS per costruire il primo, che fa quello che vuoi. VS accetterà praticamente qualsiasi file di MSBuild se si dà un'estensione csproj e il bersaglio Genera.

Altri suggerimenti

Visual Studio utilizza un compilatore in proc per aiutare con il UX del processo di generazione. A causa di questa non ci può essere una certa differenza fra VS e MSBuild. Prova a impostare l'UseHostCompilerIfAvailable proprietà su false nel file di progetto. Questo forzerà VS utilizzare MSBuild per la costruzione. Lo svantaggio è prestazioni all'interno di Visual Studio.

Si potrebbe utilizzare il fragement follwing nel .csproj (o .vbproj) file.

<PropertyGroup>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>

Perché non sostituire il bersaglio <Target Name="BeforeBuild" />? Che verranno eseguiti prima della costruzione effettiva del progetto (in quanto il target Build dipende BeforeBuild). Visual Studio sta chiamando il bersaglio di costruzione (o ricostruire), in modo da neutralizzare tale obiettivo nel Csproj lo farà per essere chiamato prima.

A meno che non si sta cercando di fare qualcosa di ancor prima che nel msbuild?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top