2010-04-07 16 views
13

Altrove sul Web, è possibile trovare consigli sull'utilizzo di qualcosa di simile per simulare la funzione Pubblica nell'IDE di VS 2005-2008 da una riga di comando (spero non mi incasina la sintassi):!MSBuild target _CopyWebApplication non copia tutti i file necessari nella cartella bin

msbuild /t:ResolveReferences;_CopyWebApplication /p:BuildingProject=true;OutDir=C:\inetpub\wwwroot\ blah.csproj 

Ora, sembra che le dll di copiare bene. Tuttavia, alcuni file di configurazione e file modello vengono copiati nella cartella bin necessari per il funzionamento dell'app. Ad esempio, un file di configurazione NHibernate presenta in blah.csproj come:

<None Include="blah.cfg.xml"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</None> 

Durante l'utilizzo Pubblica dall'interno copie IDE questo file come dovrebbe, il suddetto obiettivo _CopyWebApplication non. Ho bisogno che questo file sia copiato nello script di build. È questo comportamento desiderato per _CopyWebApplication? Qualche consiglio su come risolvere questo problema?

EDIT 4/21/2010:

Vorrei chiarire che siamo limitati (per ora) a VS 2005 e VS 2008 progetti, e che i nostri script di build sono scritti per MSBuild 3.x. Non siamo ancora pronti per passare a VS 2010.

Vorrei anche specificare che stiamo cercando una soluzione disponibile all'interno di una riga di comando in modo che possiamo automatizzare un comando di tipo Publish insieme a opzioni di compilazione personalizzate e possibilmente automatizzare gli schieramenti lungo la strada.

+0

Dispari, ho avuto lo stesso problema e l'aggiunta di ResolveReferences prima di _CopyWebApplication l'ha risolto per me. Sei sicuro di avere CopyLocal impostato su True su tutti i tuoi riferimenti? –

+1

Potrebbe voler controllare questo bug http://connect.microsoft.com/VisualStudio/feedback/details/383199/resolvereferences-does-not-correctly-walk-all-references-in-dependent-projects –

+0

@Allen - I non ha guardato CopyLocal. Leggerò su quello. – apollodude217

risposta

6

Questa è solo una soluzione.

Nello script di build per la pubblicazione di siti Web, dopo l'esecuzione MSBuild sul progetto Web stesso di pubblicarlo (Target = "ResolveReferences; _CopyWebApplication"), ho aggiunto un'operazione di copia:

<Copy SourceFiles="@(ProjectBinFiles)" DestinationFolder="$(StageBin)\%(ProjectBinFiles.RecursiveDir)" /> 

dove ProjectBinFiles è un elemento che rappresenta i file nella directory bin nella directory di origine e StageBin è una proprietà che rappresenta la cartella bin nella directory del sito pubblicato. Finora sembra funzionare.

+0

Ho provato questo su più progetti, e sembra funzionare bene. :) – apollodude217

+2

Devi definire le variabili "ProjectBinFiles", "StageBin"? Devo provare questo, ma non sono sicuro dove implementarlo nel mio compito? – D3vtr0n

+0

Sì, quelli devono essere definiti prima del comando Copia. In alternativa, puoi eseguire l'hard-code di qualsiasi valore desideri. – apollodude217

0

Stavo avendo un problema simile pure. Penso che la risposta stia usando MSDeploy. Indagare ora, ma può fornire funzionalità richieste ...

+0

Funzionerà con i progetti VS 2005 - 2008? Il mio team non è ancora pronto per passare a VS 2010 o .NET 4, poiché abbiamo ancora molte applicazioni ancora in VS 2005. – apollodude217

0

Ho avuto questo stesso problema in VS 2012 e alla fine è stato risolto facendo quanto segue a qualsiasi file che dovevano essere copiati:

  • Impostare la copia di proprietà del file di output per copiare se più recente
  • Set la proprietà del file Action Build a Content (o Compile se il file deve essere compilato)
Problemi correlati