2010-01-13 9 views
42

Ich habe ein Projekt in Visual Studio. Ich muss einige 3rd-Party-Dateien zusammen mit meinem Code bereitstellen. Normalerweise würde ich diese Dateien in ein "Resources" -Verzeichnis legen und die Erstellungsaktion für jede Datei auf "Inhalt" und die Kopie zum Ausgabeverzeichnis auf "Kopie, wenn neuer" setzen.In Visual Studio, wie kann ich die Build-Aktion für einen gesamten Ordner festlegen?

Gibt es trotzdem ich kann diese Direktiven auf der Ordnerebene festlegen. Das aktuelle Projekt, mit dem ich arbeite, enthält Dutzende solcher Dateien und einige Unterordner. Ich möchte in der Lage sein, das gesamte Verzeichnis als "Inhalt" und "Kopie, wenn neuer" zu erstellen.

Antwort

45

Erstellen Sie das Projekt. Fügen Sie eine Datei als Inhalt hinzu. Entladen Sie das Projekt und bearbeiten Sie die * proj-Datei manuell.

<ItemGroup> 
    <Content Include="myfolder**\*.dll**"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 

Und dann im Content-ItemGroup würde ich das singe Datei mit etwas, was MsBuild Wildcard Ausdruck, * .dll, oder ersetzen.

+2

Gefunden diese hilfreich für die Erstellung meiner Wildcard-Anweisungen: http://msdn.microsoft.com/en-us/library/ms171454%28VS.80%29.aspx – brendan

+1

Ich habe dies versucht. Es funktioniert, aber wenn ich ein Element mit Visual Studio hinzugefügt habe, entfernte es den Platzhalter und änderte alle einzelnen Elemente zurück in . Ich habe auch den Vorschlag unter http://stackoverflow.com/questions/3320190/visual-studio-how-to-override-the-default-build-action-for-certain-extension-t versucht. aber das hat überhaupt nicht funktioniert. – Colin

+2

Diese Wildcard-Anweisungen arbeiten für mich alle Dateien und Unterverzeichnisse zu kopieren: PreserveNewest

7

Wenn Sie passieren die Notwendigkeit, die Build Action für einen ganzen Ordner die beste Option, nur ist, um den CSPROJ Datei zu öffnen und einen regulären Ausdruck verwenden, um alle Vorkommen zu ersetzen von

<Content .... 

zu

<None ... 

Das ist für me nur perfekt funktioniert.

+0

Dies ist in der Tat eine bessere Lösung –

+3

Ich denke, was Sie gelöst haben, ist ein anderes Problem. –

+0

Hmmm aber wäre es nicht logischer, wenn du das einfach mit tools> options irgendwo einstellen könntest?Es ist ziemlich ärgerlich, dass jedes neue Asset, das Sie einem Projekt hinzufügen, standardmäßig ausgeschlossen wird. (Warum würde ich ein Asset hinzufügen, wenn ich es nicht auch in meinen endgültigen Build aufnehmen wollte?) – Kokodoko

1

Bearbeiten Sie Ihre * CSPROJ oder .vbproj Datei

Dieses Tag

<ItemGroup> 
    <Folder Include="YOUR_FOLDER_NAME_HERE/"> 
    </ItemGroup 

die letzte Datei wie folgt aussehen muss:

<Project> 
<---some more tags---> 
     <ItemGroup> 
     <Folder Include="YOUR_FOLDER_NAME_HERE\" /> 
     </ItemGroup 
<---some more tags---> 
</Project> 
+0

Versuchte dies und es hat nicht funktioniert. Ich möchte dem Projekt einen leeren Ordner hinzufügen, wenn es bereitgestellt wird. Das hat es nicht getan. – sr28

4

ich Visual Studio 2012 verwenden und Sie können Klicken Sie bei gedrückter Umschalttaste, um mehrere Elemente im Projektmappen-Explorer auszuwählen, und bearbeiten Sie dann die Eigenschaft "Ausgabeverzeichnis kopieren" aller Objekte gleichzeitig im Eigenschaftenfenster.

Zugegeben, dies entspricht nicht der Lösung, die Sie funktional suchen, aber semantisch ist es. Und hoffentlich muss die nächste Person, die über diesen Beitrag mit einem riesigen Ordner stolpert, um Abhilfe zu schaffen (wie bei mir), nicht in die .csproj-Datei eintauchen.

Hoffe, das hilft!

Verwandte Themen