Antworten:
Der MSDN-Artikel zur Build-Aktionseigenschaft erläutert die Unterschiede.
Keine - Die Datei ist nicht in der Projektausgabegruppe enthalten und wird beim Erstellungsprozess nicht kompiliert. Ein Beispiel ist eine Textdatei, die Dokumentation enthält, z. B. eine Readme-Datei.
Inhalt - Die Datei wird nicht kompiliert, sondern ist in der Ausgabegruppe Inhalt enthalten. Diese Einstellung ist beispielsweise der Standardwert für eine .htm- oder eine andere Art von Webdatei.
Ein Unterschied besteht darin, wie sie veröffentlicht werden. "Keine" Elemente werden nicht in eine Veröffentlichung aufgenommen, "Inhalt" -Elemente jedoch. Zum Beispiel im Dialogfeld "Anwendungsdateien" auf der Registerkarte "Veröffentlichen".
CopyToOutputDirectory
Satz deklariert haben , wird true
es am dotnet publish
Ich bin nicht 100% sicher (ich habe die MSDN-Beschreibung der Build Action- Eigenschaft gelesen ), aber nur das Kopieren dieser Antwort von MSDN nach StackOverflow beantwortet die Frage für mich nicht vollständig.
Der Unterschied zwischen " Keine" und " Inhalt" wirkt sich nur auf Webprojekte aus. Für ein Befehlszeilenprojekt, ein WinForm-Projekt oder ein UnitTest-Projekt (in meinem Fall) usw. Keine und Inhalt haben kein unterschiedliches Verhalten.
MSDN: "Projektausgabegruppe" oder "Inhaltsausgabegruppe" nur Begriffe, die in einem Webprojekt verwendet werden, richtig?
None
vs Content
nur Auswirkungen auf den Veröffentlichungsschritt zu haben , nicht auf den Erstellungsschritt . Für den Build-Schritt CopyToOutputDirectory
kann anscheinend entweder gesetzt werden, und das steuert, ob die Datei vom Build-Schritt kopiert wird. Es scheint auch seltsam, dass standardmäßig T4-Vorlagen als Content
Elemente und nicht als Elemente hinzugefügt None
werden.
In meiner Situation hatte meine MSBuild-Datei eine ItemGroup
für Bildressourcen, die wie folgt aussah:
<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 gut lief, fragte ich mich, warum ich eine Mischung aus Elementen Content
und None
Elementen vom Typ Element in meinem hatte ItemGroup
. Dieser MSDN-Artikel (für Visual Studio 2010) gab mir die Anleitung, nach der ich gesucht habe:
Beachten Sie, dass der Ressourceneditor beim Hinzufügen eines Bilds die Build-Aktion auf Keine setzt , da die RESX-Datei auf die Bilddatei verweist. Während der Erstellung wird das Image in die aus der .resx-Datei erstellte .resources-Datei gezogen. Auf das Bild kann dann einfach über die stark typisierte Klasse zugegriffen werden, die automatisch für die .resx-Datei generiert wird. Daher sollten Sie diese Einstellung nicht in " Eingebettete Ressource" ändern , da dies das Bild zweimal in die Assembly einschließen würde.
Auflösung: Mit dieser Führung, mit einem Texteditor, änderte ich die Content
Art Artikel Elemente None
.
Eine Übersicht über MSBuild-Elemente finden Sie in diesem MSDN-Artikel .
Ich habe ein Projekt, das keine kompilierbaren Elemente enthält (es speichert HTML und Javascript für Jasmin-Unit-Tests).
Eines Tages hörte meine Lösung (die das Projekt enthielt) auf zu kompilieren und sagte "Das Ziel" Build "existiert nicht im Projekt".
Ich habe einen Import hinzugefügt, um den Compiler einzuschalten. Dieser funktionierte auf meinem Computer einwandfrei, konnte jedoch msbuild auf dem Build-Server nicht verwenden.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Ich habe dann eine Zeile von geändert
<None Include="SpecRunner.html" />
zu
<Content Include="SpecRunner.html" />
und es funktionierte auch auf dem Build-Server.
Sie benötigen None in einer Vorlagenprojektdatei, um Dateien einzuschließen, die Sie in der .vstemplate definiert haben. Andernfalls gehen sie beim Erstellungs- und Übersetzungsprozess verloren. Sie bleiben in dem temporären Ordner zurück, in dem alles erstellt wird, und werden kurz darauf gelöscht.
In meinem Fall ist .Pubxml eine dieser Dateien in der Liste " Keine" . Es ist nicht für die Erstellung von Lösungen oder als statische Datei für Webprojekte gedacht. Um die Site jedoch in Azure zu veröffentlichen, sind die Konfigurationen darin enthalten.
Gemäß Microsoft-Artikel sind dies die Haupttypen, die wir unter .csproj- Datei-Tags sehen:
Keine - Die Datei ist nicht in der Projektausgabegruppe enthalten und wird beim Erstellungsprozess nicht kompiliert. Ein Beispiel ist eine Textdatei, die Dokumentation enthält, z. B. eine Readme-Datei.
Kompilieren - Die Datei wird in die Build-Ausgabe kompiliert. Diese Einstellung wird für Codedateien verwendet.
Inhalt - Die Datei wird nicht kompiliert, sondern ist in der Ausgabegruppe Inhalt enthalten. Diese Einstellung ist beispielsweise der Standardwert für eine .htm- oder eine andere Art von Webdatei.
Eingebettete Ressource - Diese Datei ist als DLL oder ausführbare Datei in die Ausgabe des Hauptprojekts eingebettet. Es wird normalerweise für Ressourcendateien verwendet.
Inhaltsdateien sind nicht in einem Build enthalten, sondern in einer Veröffentlichung.
Keine Dateien sind in einem Build oder einer Veröffentlichung enthalten, es sei denn, sie werden von Ihnen auf diese Weise konfiguriert. Beispielsweise führt eine Einstellung "In Ausgabeverzeichnis kopieren" von "Immer" oder "Neu" dazu, dass sie sowohl in einen Build als auch in eine Veröffentlichung aufgenommen werden.
Content
s geändert zuNone
s. Ich denke, es ist passiert, als ich bei der Konvertierung in Razor Dateien von .ascx in .cshtml umbenannt habe. Durch manuelles Zurücksetzen wurden einige meiner Bereitstellungsprobleme behoben. Ich bin froh, dass ich das gefunden habe.