Wir haben mehrere Projekte, die auf die Bibliothek assembly verweisen, rufen Sie "myUtil" auf, jetzt ist eine der Methoden, auf die in mehreren Projekten verwiesen wird,
%Vor%Wenn ich jetzt die obige Methode ändere,
%Vor%Muss ich die Assembly "myUtil.dll" in Projekte aktualisieren, die darauf verweisen?
Ohne darauf Bezug zu nehmen, erhalte ich diesen Fehler, der Sinn macht und verschwindet, wenn ich die Referenz aktualisiere, aber ich bin nicht in der Lage, Referenz zu finden, wo es heißt, Referenzen aktualisieren zu müssen
System.MissingMethodException: Methode nicht gefunden: 'Void GetData (....
Alle Referenzen müssen aktualisiert werden.
Optionale Parameter sind nur syntaktischer Zucker.
Wenn Sie dies haben:
%Vor%Und nenne es so:
%Vor%Der Compiler macht das:
%Vor%Sie müssen alle Assemblys / Projekte neu kompilieren und replizieren, die darauf verweisen.
Sie müssen die Referenz nicht entfernen und neu hinzufügen, aber Sie müssen alle Projekte neu kompilieren, die mit der DLL kompiliert werden. Das Hinzufügen eines optionalen Parameters ist eine quellkompatible, aber keine binärkompatible Änderung, da der Compiler an der -Aufrufstelle verschiedene ILs aussendet, um den Standardwert als normal einzuschließen - der Aufruf selbst sieht gleich aus die IL, ob der optionale Parameter weggelassen wurde oder nicht.
Betrachten Sie zum Beispiel den folgenden Code:
%Vor% Die IL für Main
sieht folgendermaßen aus:
Wie Sie sehen können, wird die Konstante 5 in der Main
Methode geladen und als Argument übergeben, genau wie 3 explizit. Das gleiche passiert über Baugruppengrenzen.
Dieselben Regeln gelten auch für das Ändern der Werte von Konstanten und das Ändern des Standardwerts eines optionalen Parameters - all dies erfordert Client-Neuerstellungen.
Sie können die Kompatibilität beibehalten, wenn Sie die optionalen Parameter nicht mehr verwenden und stattdessen eine Methodenüberladung verwenden:
%Vor%Wird
%Vor% Dies spiegelt jedoch keine Änderung des Standardwert wider, es sei denn, Sie kompilieren alle Projekte neu. Zum Beispiel wird jedes alte GetData(1, "2", null)
immer das neue GetData(1, "2", null, false)
aufrufen, auch wenn Sie
bis
%Vor%Tags und Links c#