Wie kann verhindert werden, dass XML-Dokumentationsdateien in einem Release-Modus kopiert werden?

82

Ich habe ein Visual Studio 2010-Projekt, das auf einige Komponenten von Drittanbietern verweist. Ihre Assemblys werden von XML-Dokumentationsdateien begleitet, die für uns (und nur für uns) Entwickler nützlich sind. Und wenn das Projekt erstellt wird (entweder im Debug- oder im Release-Modus), werden diese XML-Dateien in das Build-Verzeichnis kopiert.

Ich kann anscheinend keine Einstellung oder keinen Schalter finden, um die Kopie dieser XML-Dateien in das Build-Verzeichnis zu deaktivieren, weder in Visual Studio noch in MSBuild. Ein Post-Build-Skript kann eine Option sein, aber es stinkt. Irgendwelche Ideen? Danke dir.

Humberto
quelle
1
Um dies zu verdeutlichen, haben Sie im Dialogfeld "Referenz hinzufügen" einen Verweis auf eine Baugruppe hinzugefügt. Wenn Sie jetzt das Dokument erstellen, werden XML-Dateien in Ihrem Ausgabepfad angezeigt?
Sagte Ibrahim Hashimi

Antworten:

112

Wenn Sie ein Projekt erstellen, werden die XML- / PDF-Dateien über die Task ResolveAssemblyReference erfasst. Wenn ResolveAssemblyReference aufgerufen wird, wird eine Liste der Dateierweiterungen für verwandte Dateien übergeben. Diese Liste der Dateierweiterungen wird in der MSBuild-Eigenschaft AllowedReferenceRelatedFileExtensions erfasst . Standardmäßig enthält diese Liste ".pdb; .xml".

Wenn Sie alle zugehörigen Referenzdateien von der Erfassung ausschließen möchten, überschreiben Sie einfach den Wert der Eigenschaft auf etwas, dessen zugehörige Dateien keine Erweiterungen haben. Beispielsweise können Sie AllowedReferenceRelatedFileExtensions auf "-" setzen.

Sie können auch die Liste der Dateien anpassen, die von diesem zurückgegeben werden. Wenn Sie nur .pdb-Dateien finden möchten, müssen Sie übergeben AllowedReferenceRelatedFileExtensions=".pdb". In diesem Fall werden auch alle Referenzen kopiert, die eine .pdb-Datei neben der .dll / .exe haben. Sie können dies auch verwenden, um andere verwandte Dateien zu kopieren, die möglicherweise nicht mit .pdb / .xml enden. Wenn Sie beispielsweise eine Assembly mit dem Namen MyAssembly.dll haben und in demselben Ordner MyAssembly.pdb und MyAssembly.foo vorhanden sind, werden AllowedReferenceRelatedFileExtensions=".pdb;.foo"sowohl die .pdb- als auch die .foo-Datei in das Ausgabeverzeichnis kopiert.

Sagte Ibrahim Hashimi
quelle
Das ist die Antwort. Vielen Dank!
Humberto
15
Es ist lustig, dass es 2 Jahre gedauert hat, um eine Antwort darauf zu bekommen.
Sagte Ibrahim Hashimi
Ich habe gerade festgestellt, dass ich dies vor 2 Jahren kommentiere. Tut mir leid, dass ich damals nicht geantwortet habe :(
Sagte Ibrahim Hashimi
7
Besonderheiten auf , wie dies zu spezifizieren auf der msbuild Befehlszeile oder in einer Projektdatei: stackoverflow.com/questions/2011434/...
yzorg
3
Wo in Visual Studio können wir das ändern AllowedReferenceRelatedFileExtensions?
Apostrofix
0

Die Visual Studio-Projektdatei hat das gleiche Format wie jede msbuild-Datei. Sie können die Bedingung also manuell in den entsprechenden Abschnitt einfügen, um Ihre XML-Dateien nicht zu kopieren, wenn der Konfigurationsname "Release" lautet.

Es sollte sich ändern

<ItemGroup>

zu

<ItemGroup Condition="'$(CONFIG)'=='RELEASE'">

oder sowas.

Alex
quelle
3
Ein Visual Studio-Projekt und eine Lösungsdatei SIND MSBuild-Dateien.
AMissico
@AMissico Falsch, Lösungsdateien sind keine MSBuild-Dateien.
Julealgon
Obwohl sie nicht im Projektdateiformat (XML) vorliegen, handelt es sich dennoch um eine unterstützende MSBuild-Datei. Setzen Sie die Umgebungsvariable ( set MSBuildEmitSolution=1oder übergeben Sie das Eigenschaftsargument ( p:msbuildemitsolution=1).
AMissico
-4

Was ist das Problem beim Kopieren der XML-Dateien in den Ordner bei Release-Builds? Es scheint mir, dass dies in Ordnung ist und dass das eigentliche Problem im Code liegt, der Dateien aufnimmt, um sie im Installationsprogramm abzulegen. Das Abrufen von DLLs von Drittanbietern aus Ihrem eigenen Ordner bin \ release ist meiner Meinung nach keine gute Vorgehensweise. Ich würde mein Installationsprogramm DLLs von Drittanbietern aus ihrem eigenen Ordner in meinem Quellbaum abholen lassen.

Russell McClure
quelle
2
Das Problem ist, dass diese Dateien keine andere Funktion haben, als die IntelliSense-Funktion zu unterstützen. Es macht keinen Sinn, sie in die Release-Dateien aufzunehmen. Außerdem ist kein Installer beteiligt ...
Humberto
Wie stellen Sie Ihre App bereit?
Russell McClure
3
Meine Lösung wäre also, das Kopierskript so zu ändern, dass die Dateien, die Sie nicht kopieren möchten, nicht kopiert werden.
Russell McClure
2
das würde sicher funktionieren. Dies ist jedoch nicht die ideale Lösung, um zu verhindern, dass die Dateien im Build kopiert werden. Ich versuche die Logik hinter diesem Verhalten zu verstehen. Vielen Dank!
Humberto
4
Gut geschriebene XML-Dokumentationsdateien sind groß. Das Kopieren bei jedem Build verkürzt die Lebensdauer meiner SSD.
springy76
-5

Wenn die .xml / .pdb als Build-Aktion "Inhalt" (usw.) markiert sind, können Sie sie in "Keine" ändern. Sie sollten auch sicherstellen, dass die Ausgabe von Copy-to-Build falsch ist .

Sind beide gesetzt?

Marc Gravell
quelle
2
Aber dazu müsste ich sie als Projektelemente hinzufügen ... oder irre ich mich?
Humberto
Vom Compiler generierte PDB- und XML-Dateien sollten niemals in ein Projekt aufgenommen werden, da dies zu rekursiven Erstellungsfehlern und Dateisperrungen führen kann.
Jamie Howarth
@codegecko hast du das "Keine" gesehen? Sie müssen sich neben der Quell-DLL befinden, um Intellisense usw. zu erhalten. Ich hatte noch nie ein Problem damit.
Marc Gravell
1
@codegecko wer hat etwas über den Mülleimer gesagt? Ich würde von dort nicht referenzieren ... Ich verweise normalerweise von einer / lib mit der DLL, XML und PDF.
Marc Gravell
1
Aaaaah, jetzt, wo der Penny gefallen ist, habe ich falsch verstanden. Einfügen in einen / lib-Ordner, Verweisen auf VS, Hinzufügen der Elemente zu einem Lösungsordner, Angeben des Ausgabetyps als "Keine" - verstanden. Könnte anfangen, das für meine eigenen Projekte zu verwenden - danke!
Jamie Howarth
-5

Die Einstellung befindet sich in den Eigenschaften des betreffenden Projekts auf der Registerkarte "Erstellen" und deaktivieren Sie "XML-Dokumentationsdatei". Es ist auch eine MSBuild-Eigenschaft, die <DocumentationFile>unter der <PropertyGroup>für Ihre Build-Konfiguration geltenden Datei in der. * Proj-Datei aufgerufen wird.

Jamie Howarth
quelle
3
Diese Antwort ist ungenau. Er fragt nach vorgenerierten XML-Dateien, die von einem Kontrollanbieter stammen. Ihre Antwort ist nur hilfreich, wenn Sie Ihre eigenen XML-Dateien generieren.
Kevin Kalitowski
Es scheint, dass Sie dies in der .csproj-Datei im <PropertyGroup> -Element festlegen können: <AllowedReferenceRelatedFileExtensions> ".pdb". = "" </ AllowedReferenceRelatedFileExtensions>
Jay