2011-09-21 8 views
7

Questa è probabilmente una FAQ, ma non siamo stati in grado di trovare una soluzione anche dopo molte ricerche.Spostare gli elementi di compilazione in msbuild in un file separato?

Abbiamo un numero di file msbuild che funzionano tutti sullo stesso set di file sorgente. (Non è particolarmente rilevante, ma si compila su piattaforme completamente diverse.) Per semplificare la gestione di questi, vorremmo spostare i nomi dei file di origine <Compile> in un file separato e fare riferimento a quello da tutti i file msbuild.

Abbiamo provato tagliando il <ItemGroup> contenente le <Compile> oggetti e incollandolo in un nuovo file, e circonda con

<Project DefaultTargets="Build" ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

quindi riferimento a quel file dal originale con

<Import Project="Common.files.csproj" />

ma che non funziona - la soluzione si apre (con un avviso dato che abbiamo violato la configurazione di default), bu t nessun elemento appare in Solution Explorer.

Cosa stiamo sbagliando?

+0

Cosa succede se si seleziona "Mostra tutti i file"? – mellamokb

+1

@mellamokb: non dovrebbe essere importante - Mostra solo tutti i file consente di visualizzare ciò che si trova sul disco. Ho provato anche solo per esserne sicuro. – bright

risposta

10

provato con Visual Studio 2010:

1) Crea il tuo .proj esterna (o file .target) e aggiungere i file (io ho usato un nome elemento diverso, ma che non dovrebbe importare)

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
     <ExternalCompile Include="Program.cs" /> 
     <ExternalCompile Include="Properties\AssemblyInfo.cs" /> 
    </ItemGroup> 
</Project> 

2) importare il file .proj esterna nella parte superiore del tuo Visual Studio file di progetto:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="MyExternalSources.proj" /> 
    <PropertyGroup> 
    ... 

e modificare il Compile ItemGroup come questo:

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
</ItemGroup> 
... 

Attenzione: Dovrete aggiungere nuovi articoli/file al file .proj esterna - Tutti gli articoli/i file aggiunti all'interno di Visual Studio finirà come questo :

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
    <Compile Include="MyNewClass.cs" /> 
</ItemGroup> 
... 
+0

Eccellente , che funzioni. Sì, è un peccato dover aggiungere gli oggetti a mano, ma possono essere aggiunti come al solito e poi spostati sul file esterno prima del check-in. – bright

+0

Ho provato la stessa tecnica con ma non sembra funzionare. Qualcuno sa come importare un set di contenuti "predefinito", ad es. quando si lavora con un'applicazione Web OSS esistente. – uniquelau

+0

@uniquelau Ho appena provato ed espirato un problema quando i file si trovano all'esterno della cartella del progetto "principale". Non appena ho spostato il contenuto "statico" nella cartella del progetto, ha funzionato allo stesso modo con un gruppo di oggetti 'Content'. La mia soluzione è in realtà solo una soluzione alternativa e mostra come è possibile modificare i file di progetto VS. Forse un'attività personalizzata post-build potrebbe gestire lo spostamento del contenuto statico nel tuo caso. – Filburt

0

Non ho mai visto i file "include" funzionare con MSBuild. Ovviamente i file Targets funzionano in questo modo, ma non ho visto un file msbuild parziale incluso in un altro. Potresti usare un metodo come illustrato in questo?
http://msdn.microsoft.com/en-us/library/ms171454(VS.80).aspx

L'utilizzo dei caratteri jolly è il modo in cui l'ho affrontato in passato.

+0

Grazie, ma sto ancora cercando una soluzione. Questa potrebbe essere l'ultima risorsa se tutto il resto fallisce, ma non è ottimale. – bright

+0

potresti anche usare l'operazione CreateItem abbinata al tuo file personalizzato analizzando per aggiungere elementi al ItemGroup di compilazione durante una destinazione di BeforeBuild ... http://msdn.microsoft.com/en-us/library/s2y3e43x.aspx –

Problemi correlati