2017-02-20 4 views
0

Ich habe ein System, das eine externe COM-Komponente verwendet. Es gibt zwei verschiedene Versionen des COM-Objekts, die im Wesentlichen identisch sind (Der Anbieter hat die COM-GUID ohne eine Änderung der Schnittstelle geändert.) Ich verwende tlbimp.exe, um zwei Interop-DLLs zu erstellen, die für jedes COM-Objekt grundsätzlich identisch sind. Ich möchte zwei .NET-DLLs desselben Assemblynamens für jedes COM-Objekt erstellen. Ich habe also zwei verschiedene Projekte, die auf den gleichen C# Quellcode verweisen (Add as Link). Der einzige Unterschied ist ein anderer Verweis auf die Interop-DLL. Der Plan war, mit verschiedenen DLLs zu enden, die im Grunde die gleichen sind (eine für jedes COM-Objekt) und dann die, die zur Installationszeit benötigt wird, umzubenennen.MSBuild Build-DLL mit zwei verschiedenen Projekten

Ich begann mit einem anderen bin-Verzeichnis für die zweite DLL gebaut. Der Erstellungsprozess wird jedoch auf einzelnes bin-Verzeichnis (TFS Output Location = Single Folder) festgelegt, das die zweite DLL verursacht, die erste zu überschreiben. Also habe ich ein Post-Build-Skript hinzugefügt, um jede DLL so zu benennen, wie sie gebaut wurde.

Das nächste Problem ist, dass die Umbenennung Downstream-Code zu kompilieren verhindert. (Fehlende Assembly-Fehler) Ich könnte versuchen, den ersten DLL-Build auszuwählen und ihn mit dem ursprünglichen Namen zu versehen, aber ich kann Szenarien sehen, wenn sie lokal erstellt werden, was mit Verwirrung enden würde. Welches COM-Objekt wird verwendet? Grundsätzlich können Buildfehler das System in einem seltsamen Zustand hinterlassen.

Ich schaute ursprünglich, um zu sehen, ob ich eine DLL mit seinem Dateiname erstellen könnte, der sich vom internen Assemblynamen unterscheidet, aber das scheint nicht möglich.

Zwei Gedanken über eine Lösung: (? Vielleicht ein anderer da ist)

1) Kann ich eine .NET-DLL mit dem Dateinamen bauen unterscheidet sich von der Assembly? ODER

2) Was ist eine saubere Möglichkeit, den Aufbau von einer (oder beiden) DLL umzubenennen/zu kopieren und eine von ihnen für abhängige Code-Erstellung zu bewahren?

Antwort

0

Was ich am Ende war dabei die zweite DLL in einer anderen Lösung zu spalten und ein weiteren Eintrag in dem TFS-Prozess machen/Build/Projekte

Im zweiten Projekt Pre-Build-Schritt, den ich benötigen, um die erste DLL umbenennen damit das zweite Projekt mit demselben DLL-Namen erstellt wird. Dann habe ich im Post-Build-Schritt die neue DLL in ihren speziellen Namen umbenannt und die erste DLL wieder in den ursprünglichen Namen umbenannt.

Ich fühlte, das war der sauberste Weg, um das Problem zu behandeln. TFS-Build stellt sicher, dass diese zweite Lösung/dieses zweite Projekt in sequenzieller Reihenfolge erstellt wird.

Im Einzellösung-Konzept hatte ich mit dem Umbenennen in den Pre/Post-Build-Ereignissen der Projekte herumgespielt, aber festgestellt, dass sie nicht so sequentiell sind, wie Sie vielleicht denken. Sehen Sie diesen Beitrag für weitere Informationen:

MSbuild build order issue - pre-build steps first or dependent projects first

ich nicht manuell wollte die csproj XML bearbeiten, da wir auf das Team nicht viele haben, die mit solchen Änderungen vertraut sind. Also die zweite Lösung für den Build.

Verwandte Themen