2009-06-29 5 views
81

Wie istWas ist in einer .csproj-Datei <None Include = "...">?

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

unterscheidet sich von

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

?

+28

Monoxid, ich glaube, Sie haben Ihre eigene Frage beantwortet: aus Neugier. –

+6

Ich hatte ein paar 'Inhalt' geändert zu 'None's. Ich denke, dass es passierte, wenn ich Dateien von .ascx in .cshtml umbenannte, wenn ich in Razor umwandelte. Durch das manuelle Zurücksetzen wurden einige Probleme bei der Bereitstellung behoben. Ich bin froh, dass ich das gefunden habe. – Chris

+7

@MatthewScharley Ich wünschte wirklich, du könntest deine Kommentare ablehnen, weil ich deine kommentieren würde. Warum sollte er nicht seine .csproj-Dateien bearbeiten? – Jez

Antwort

88

Der MSDN-Artikel auf der build action-Eigenschaft erklärt die Unterschiede.

Keine - Die Datei wird nicht in der Projektausgabegruppe enthalten und wird nicht in den Build-Prozess erstellt. Ein Beispiel ist eine Textdatei, die Dokumentation enthält, z. B. eine Readme-Datei.

Inhalt - Die Datei ist nicht kompiliert, aber in der Inhaltsausgabegruppe enthalten. Diese Einstellung ist beispielsweise der Standardwert für eine HTM-Datei oder eine andere Art von Webdatei.

+4

Danke, ich hatte Probleme, diese Referenz zu finden. – Emmett

20

Ein Unterschied ist, wie sie veröffentlicht werden; "Keine" Elemente werden nicht in eine Veröffentlichung eingeschlossen, "Inhalt" Elemente tun; zum Beispiel im Dialogfeld "Anwendungsdateien" auf der Registerkarte "Veröffentlichen".

10

Ich bin nicht 100% sicher (Ich las die MSDN Beschreibung von Build Action Eigenschaft), aber das Kopieren nur die Antwort von MSDN zu Stackoverflow die Frage nicht ganz für mich beantworten.

Der Unterschied von Keine und Inhalt hat nur eine Auswirkung auf Web-Projekte. Für ein Command Line Projekt, WinForm Projekt oder UnitTest Projekt (in meinem Fall) usw. Keine und Inhalt haben kein unterschiedliches Verhalten.

MSDN: "Projekt-Output-Gruppe" oder "Content-Output-Gruppe" nur Begriffe in einem Web-Projekt verwendet, oder?

+1

Wie Sie sagen, scheint 'None' vs' Content' nur für den Schritt _publish_, nicht für den _build_-Schritt. Für den Build-Schritt scheint 'CopyToOutputDirectory' gesetzt zu sein und kontrolliert, ob die Datei vom Build-Schritt kopiert wird. Es erscheint auch seltsam, dass T4-Vorlagen standardmäßig als "Content" -Elemente und nicht als "None" -Elemente hinzugefügt werden. –

1

Ich habe ein Projekt, das keine kompilierbaren Elemente enthält (es speichert HTML und Javascript für Jasmin-Unit-Tests).

Eines Tages meine Lösung (das Projekt sagte enthielt) gestoppt Kompilieren sagen: „Das Ziel‚Build‘existiert nicht im Projekt“.

Ich habe einen Import in den Compiler zu bringen, die auf meiner Maschine gut funktioniert aber nicht msbuild auf dem Build-Server.

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

Ich änderte dann eine Linie von

<None Include="SpecRunner.html" /> 

zu

<Content Include="SpecRunner.html" /> 

und es auch auf dem Build-Server gearbeitet.

1

Sie benötigen None in einer Vorlagenprojektdatei, um Dateien einzuschließen, die Sie in der .vstemplate definieren, andernfalls gehen sie in dem Erstellungsvorgang & verloren. Sie werden in dem temporären Ordner zurückgelassen, in dem sie alles erstellen und dann kurz darauf gelöscht werden.

5

In meiner Situation, meine MSBuild-Datei ein ItemGroup für Bild Ressourcen hatte, die wie folgt aufgetaucht:

<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> 

Während mein Projekt fein aufbaute, verließ diese fragen mich, warum ich Artikel eine Mischung aus Content und None hatte Art Elemente in meinem ItemGroup. Diese MSDN article (für Visual Studio 2010) gab mir die Führung ich suchte:

Beachten Sie, dass, wenn der Ressource-Editor ein Bild hinzufügt, es Build- Aktion zu Keine setzt, weil die RESX-Datei verweist auf das Bild Datei. Zur Erstellung wird das Bild in die .resources-Datei gezogen, die aus der RESX-Datei erstellt wurde. Auf das Bild kann dann leicht zugegriffen werden über die stark typisierte Klasse für die .resx-Datei automatisch generiert. Daher sollten Sie diese Einstellung nicht in Embedded Ressource ändern, da dies das Bild zweimal in der Baugruppe enthalten würde.

Auflösung: Mit dieser Führung, mit einem Texteditor, änderte ich die Content Elementtyp Elemente None.

Weitere Informationen zu MSBuild-Produkten finden Sie unter MSDN article.

Verwandte Themen