2017-03-05 2 views
0

Ich habe eine Visual Studio-Lösung mit mehreren C# -Projekten, die unnötigerweise einige der Projekte der Lösung wieder aufbauen, wenn absolut keine Änderungen in ihnen vorgenommen worden sind.Visual Studio 2015 unnötige Umbauten

Nachdem ich die Build-Ausgabe auf die "Diagnose" -Ebene gesetzt habe, wie in einigen verwandten Posts vorgeschlagen, bekomme ich eine Reihe von Nachrichten im folgenden Format: Projekt 'company.xxx' ist nicht auf dem neuesten Stand. Die Eingabedatei 'c: ... \ company.yyy.dll' wird nach der Ausgabedatei 'c: ... \ company.yyy.pdb' geändert.

Firma.xxx verweist auf company.yyy Projekt mit Copy Local = true.

Irgendwelche Ideen?

+0

Die DLL und die PDB-Datei sollten den gleichen Timestamp haben und immer wenn ein Projekt erstellt wird. Sie müssen herausfinden, welche bösartige Software die DLL anschließend modifiziert. Oder verhindert möglicherweise, dass die neue PDB in das Zielverzeichnis kopiert wird. –

+0

@Konstantinos Papakonstantinou, was ist mit diesem Problem? Würden Sie mir bitte die neuesten Informationen zu diesem Thema mitteilen? –

Antwort

0

Dies steht im Zusammenhang mit den inkrementellen Builds. Sie können sich auf die folgenden Informationen als ein einfaches Verständnis beziehen, und Sie können auf die Incremental Builds für weitere Detailinformationen verweisen.

Ein Zielelement kann beide ein Eingang-Attribut, das, welche Elemente gibt das Ziel> als Eingabe erwartet und einen Ausgang Attribut, das, welche Elemente zeigt es erzeugt als Ausgabe MSBuild versucht, ein 1-zu-1 zu finden, Zuordnung zwischen den Werten dieser Attribute. Wenn ein 1-zu-1-Mapping vorhanden ist, vergleicht MSBuild den Zeitstempel jedes Eingabeelements mit dem Zeitstempel des entsprechenden Ausgabeelements. Ausgabedateien ohne 1-zu-1-Zuordnung werden mit allen Eingabedateien verglichen. Ein Artikel wird als aktuell betrachtet, wenn seine Ausgabedatei gleich alt oder älter als die Eingabedatei oder Dateien ist.

Wenn alle Ausgabeelemente auf dem neuesten Stand sind, überspringt MSBuild das Ziel. Diese inkrementelle Build des Ziels kann die Build Geschwindigkeit erheblich verbessern. Wenn nur einige Dateien aktuell sind, führt MSBuild das Ziel aus, überspringt jedoch die aktuellen Elemente und bringt dadurch alle Elemente auf den neuesten Stand. Dies wird als partieller inkrementeller Build bezeichnet.

Gemäß dem Ausgabeprotokoll "ist das Projekt 'company.xxx' nicht auf dem neuesten Stand. Die Eingabedatei 'c: ... \ company.yyy.dll' wird nach der Ausgabedatei 'c: ... \ company.yyy.pdb' "geändert. Sie sollten das Projekt company.yyy vor dem erneuten Erstellen der Lösung ändern Nach dieser Änderung muss die Datei company.yyy.dll basierend auf den inkrementellen Builds neu erstellt werden. Außerdem verweist Company.xxx auf company.yyy project, daher wird die Datei company.yyy.dll als Eingabedatei für das Projekt company.xxx verwendet, die Eingabedatei wurde geändert, das Projekt company.xxx wird neu erstellt.

Die Firma.xxx würde aufgrund der Änderung auf den Referenzen Projekt company.yyy neu gebaut werden, obwohl absolut keine Änderungen in ihnen das Unternehmen.xxx Projekt direkt vorgenommen wurden.

+0

Also, ich denke, so sollte es funktionieren. Gibt es irgendeinen Weg, um den Wiederaufbau der Projekte zu vermeiden, die auf das modifizierte Projekt verweisen? –

+0

@Konstantinos Papakonstantinou, soweit ich weiß, konnten wir nicht umhin, das Projekt nach der Änderung seines Referenzprojekts wieder aufzubauen. Es ist das Standardverhalten von Visual Studio, so dass alle Änderungen kompiliert werden. Wenn die obige Antwort Ihre Frage beantwortet, können Sie sie als Antwort markieren, was für andere Gemeinschaften von Nutzen ist, die das gleiche Problem haben, wenn nicht, lassen Sie mich die neuesten Informationen über dieses Problem wissen, wir werden weiter verfolgen.Vielen Dank. –