Wie kann ich .NET-Assemblys patchen?

Wenn ich ein C # -Projekt zweimal kompiliere, erhalte ich zwei Assemblys. Diese Assemblys sind nicht genau gleich (mit einem binären Diff). Ich kann mir Gründe vorstellen, warum dies so ist, aber die Tatsache bleibt, dass die Quelle für die beiden Baugruppen identisch ist.

Es geht mir darum, einen Patch zwischen diesen Assemblys zu erstellen und den Patch auf einem Kundencomputer anzuwenden.

Kennt jemand eine Bibliothek (vorzugsweise .NET) oder ein Tool, mit dem ich Patches erstellen und anwenden kann?

Im Idealfall sollten auch kleine Änderungen vorgenommen werden, z. B. das Ändern von Abhängigkeiten auf Projektebene oder das Ändern einiger Zeilen in der Quelle. Größere Änderungen muss es nicht verkraften, da ich in diesem Fall gerne Baugruppen komplett austausche.

Aktualisieren:

Ich denke, ein bisschen mehr Hintergrundwissen könnte klären, worauf ich hinaus will. Ich habe einen Continuous Integration Server, der meine Anwendung erstellt. Ich ändere die Datei- und Assemblyversion entsprechend der Build-Nummer und der Version, die ich erstelle. Ich hätte es anders machen können, aber das ist die Option, die ich mag.

Dies führt dazu, dass sich Assemblyverweise ändern, wenn ich meine Anwendung erstelle, aber ich bin damit zufrieden. Ich befasse mich jetzt mit der Verteilung eines Updates auf eine zuvor veröffentlichte Version. Ich erstelle Updates mit InstallShield. Die für InstallShield verfügbaren Assemblys sind auf kleine Patches beschränkt. Dies erhöht die Größe des Updates nicht um ein Vielfaches.

Meine Anwendung verfügt über einige Datendateien, bei denen es sich im Grunde genommen um verschlüsselte Archive handelt, die Assemblys enthalten. InstallShield hat keinen Zugriff auf diese Assemblys und kann mein Archiv nicht verstehen. Es kann nicht entschlüsseln und extrahieren. Ich habe meine eigene Patch-Routine geschrieben, die geänderte Dateien im vorherigen Archiv findet und durch die neue aktualisierte Version ersetzt. Grundsätzlich eine Such- und Ersetzungsstrategie.

Das eine Archiv enthält fast hundert (und mehr) dieser Assemblys, und einige dieser Assemblys enthalten große Datendateien als Ressourcen. Diese Baugruppen sind abhängig von Baugruppen, die Teil der Anwendung sind. Sie werden auch während des kontinuierlichen Integrationsaufbaus kompiliert. Wenn Sie sie während des Builds nicht kompilieren, bleibt Platz für Abhängigkeitsprobleme, und ich bin nicht bereit, dies zu versuchen und zu verwalten. Jedes Mal, wenn ich einen Patch erstelle, sind alle diese Assemblys enthalten. Ich suche jetzt nach Optionen zum Verringern der Patch-Größe, indem Patches für diese Assemblys generiert werden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage