In un file .csproj, che cosa significa <None Include = “…”> per?


137

Com'è

<None Include="C:\foo.bar" />

diverso da

<Content Include="C:\foo.bar" />

?


7
Ho avuto qualche Contents cambiato in Nones. 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.
Chris,

Risposte:


135

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.


5
Grazie, ho avuto problemi a trovare questo riferimento.
Emmett,

Utile, ma perché avere un elemento "Nessuno" se il file non deve essere incluso nell'output? Qual e il punto?
JimH44,

1
@ JimH44 Gli elementi <Nessuno> vengono spesso utilizzati per copiare in modo specifico i file nella directory di output, anche se per impostazione predefinita non fanno parte del gruppo di output . Se selezioni "Copia nella directory di output" -> "Copia sempre" per un file <Nessuno>, questo verrà copiato e vedrai che la voce aggiunta al file .csproj del progetto avrà una voce <Nessuno> per il file.
Conspicuous Compiler,

3
Quindi qual è la differenza tra un file <Nessuno> con "Copia nella directory di output" -> "Copia sempre" e un file <Content> con "Copia nella directory di output" -> "Copia sempre"?
hashtable il

30

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.


8
Non vero. Almeno nel nuovo dot net cli. se hai un oggetto dichiarato Nessuno con un CopyToOutputDirectoryset trueverrà pubblicato in undotnet publish
disklosr il

13

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?


2
Come dici tu, sembra Nonevs Contentha effetto solo per il passaggio di pubblicazione e non per il passaggio di creazione . Sembra che sia CopyToOutputDirectorypossibile 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 Contentelementi e non come Noneelementi.
Christopher King,

8

Nella mia situazione, il mio file MSBuild aveva ItemGrouprisorse 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 Contente Noneelementi 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 Contentelementi del tipo di elemento in None.

Inoltre, per una panoramica degli elementi di MSBuild, consultare questo articolo MSDN .


3

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.


2

Non è necessario nessuno in un file di progetto modello per includere i file definiti nel .vstemplate, altrimenti andranno persi nel processo di creazione e traduzione. Vengono lasciati indietro nella cartella temp che usa per costruire tutto e poi cancellati poco dopo.


1

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.


1
Si prega di commentare qui, se qualcosa è fuorviante o non chiaro, solo un voto negativo non mi aiuta a migliorarlo. Grazie in anticipo.
Krishna Kanth,

1
Ho spesso ricevuto un errore: il nome dell'elemento "Nessuno" per includere "Proprietà \ PublishProfiles \ FolderProfile.pubxml" deve essere "Contenuto". nel mio progetto Asp.Net su Bamboo, e qualche volta rieseguire la build può semplicemente risolverlo, quindi non so quale sia esattamente il problema
Bochen Lin

Ciao @BochenLin, i dettagli che hai menzionato qui sono un po 'scarsi, puoi provare a fornire maggiori dettagli qui o pubblicare una nuova domanda con i dettagli completi del problema e lo screenshot se possibile [e quindi condividere il link della domanda qui].
Krishna Kanth,

0

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.