Risposte:
L'articolo MSDN sulla proprietà dell'azione build spiega le differenze.
Nessuno : il file non è incluso nel gruppo di output del progetto e non viene compilato nel processo di generazione. Un esempio è un file di testo che contiene documentazione, ad esempio un file Leggimi.
Contenuto : il file non è stato compilato, ma è incluso nel gruppo di output del contenuto. Ad esempio, questa impostazione è il valore predefinito per un .htm o un altro tipo di file Web.
Una differenza è come vengono pubblicati; Gli elementi "Nessuno" non vengono inclusi in una pubblicazione, gli articoli "Contenuto" lo fanno; ad esempio, nella finestra di dialogo "File applicazioni" nella scheda Pubblica.
CopyToOutputDirectory
set true
verrà pubblicato in undotnet publish
Non sono sicuro al 100% (ho letto la descrizione MSDN della proprietà Build Action ), ma solo copiare quella risposta da MSDN a StackOverflow non risponde completamente alla domanda per me.
La differenza tra Nessuno e Contenuto ha effetto solo sui progetti Web. Per un progetto da riga di comando, un progetto WinForm o un progetto UnitTest (nel mio caso) ecc. Nessuno e il contenuto non hanno un comportamento diverso.
MSDN: "gruppo di output del progetto" o "gruppo di output del contenuto" sono solo termini utilizzati in un progetto Web, giusto?
None
vs Content
ha effetto solo per il passaggio di pubblicazione e non per il passaggio di creazione . Sembra che sia CopyToOutputDirectory
possibile impostare il passaggio di creazione su entrambi e che controlla se il file viene copiato dal passaggio di creazione. Sembra anche strano che per impostazione predefinita i modelli T4 vengano aggiunti come Content
elementi e non come None
elementi.
Nella mia situazione, il mio file MSBuild aveva ItemGroup
risorse per l'immagine che apparivano come segue:
<ItemGroup>
<Content Include="Resources\image001.png" />
<Content Include="Resources\image002.png" />
<Content Include="Resources\image003.png" />
<Content Include="Resources\image004.png" />
<None Include="Resources\image005.png" />
<None Include="Resources\image006.png" />
<None Include="Resources\image007.png" />
</ItemGroup>
Mentre il mio progetto stava costruendo bene, questo mi ha lasciato chiedendo perché ho avuto un mix di Content
e None
elementi di tipo articolo nel mio ItemGroup
. Questo articolo di MSDN (per Visual Studio 2010) mi ha dato la guida che stavo cercando:
Si noti che quando l'editor di risorse aggiunge un'immagine, imposta Build Action su None , poiché il file .resx fa riferimento al file di immagine. Al momento della creazione, l'immagine viene estratta nel file .resources creato dal file .resx. È quindi possibile accedere facilmente all'immagine tramite la classe fortemente tipizzata generata automaticamente per il file .resx. Pertanto, non è necessario modificare questa impostazione in Risorsa incorporata , poiché ciò includerebbe l'immagine due volte nell'assieme.
Risoluzione: con questa guida, utilizzando un editor di testo, ho modificato gli Content
elementi del tipo di elemento in None
.
Inoltre, per una panoramica degli elementi di MSBuild, consultare questo articolo MSDN .
Ho un progetto che non contiene elementi compilabili (memorizza html e javascript per i test di unità jasmine).
Un giorno la mia soluzione (che conteneva detto progetto) ha smesso di essere compilata dicendo "Il target" Build "non esiste nel progetto".
Ho aggiunto un'importazione per portare il compilatore, che ha funzionato bene sulla mia macchina ma non è riuscito a utilizzare msbuild sul server di compilazione.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Ho quindi cambiato una riga da
<None Include="SpecRunner.html" />
per
<Content Include="SpecRunner.html" />
e ha funzionato anche sul server di compilazione.
Nel mio caso .Pubxml è uno di quei file nell'elenco Nessuno . Non è pensato per la creazione di soluzioni o come file statico per progetti Web. Ma per pubblicare il sito in Azure, le configurazioni sono presenti in questo.
Come da articolo Microsoft questi sono i principali tipi che vediamo tra i tag di file .csproj :
Nessuno: il file non è incluso nel gruppo di output del progetto e non viene compilato nel processo di generazione. Un esempio è un file di testo che contiene documentazione, ad esempio un file Leggimi.
Compila: il file viene compilato nell'output di compilazione. Questa impostazione viene utilizzata per i file di codice.
Contenuto: il file non è stato compilato, ma è incluso nel gruppo di output del contenuto. Ad esempio, questa impostazione è il valore predefinito per un .htm o un altro tipo di file Web.
Risorsa incorporata: questo file è incorporato nell'output di compilazione del progetto principale come DLL o file eseguibile. In genere viene utilizzato per i file di risorse.
I file di contenuto non sono inclusi in una build, ma sono inclusi in una pubblicazione.
Nessuno dei file non è incluso in una compilazione o pubblicazione, a meno che non sia configurato in questo modo da te. Ad esempio, un'impostazione "Copia nella directory di output" di "Sempre" o "Più recente", farà sì che vengano inclusi sia in una build che in una pubblicazione.
Content
s cambiato inNone
s. Penso che sia successo quando ho rinominato i file da .ascx a .cshtml durante la conversione in Razor. La loro modifica manuale ha risolto alcuni problemi di distribuzione che avevo. Sono contento di averlo trovato.