Warum werden C # -Referenzen zwischen NuGet und Visual Studio anders hinzugefügt?

8

Wir verwenden NuGet (NuGet Version: 3.5.0.1996) auf zwei verschiedene Arten. Entweder wir führen es von der Befehlszeile aus oder wir verwenden den NuGet-Paket-Manager in Visual Studio (2015).

Das Problem besteht darin, dass diese beiden Wege Referenzen auf die .csproj-Datei mit unterschiedlichen Formaten hinzufügen. Wenn wir die Befehlszeile verwenden, erhalten wir eine Referenz, die folgendermaßen aussieht:

%Vor%

Wenn wir den NuGet-Paket-Manager in Visual Studio verwenden, erhalten wir eine Referenz, die folgendermaßen aussieht:

%Vor%

Beachten Sie, dass die eine den Verweis mit dem PublicKeyToken-Attribut hinzufügt, und die andere fügt sie mit dem processorArchitecture-Attribut hinzu.

Dies verursacht Probleme mit unserer Quellcodeverwaltung mit häufigen (und unnötigen) Aktualisierungen und Zusammenführungen.

Es wäre schön zu wissen, warum das passiert, aber ich hätte lieber einen Weg, dies zu verhindern. Irgendwelche Vorschläge?

    
melvers 13.07.2017, 18:48
quelle

1 Antwort

-1

Ich habe ein wenig Nachforschungen angestellt. Und beschließe, eine Antwort zu posten.

PublicKeyToken = null gibt Ihnen Informationen darüber, dass CLR nach der nicht signierten Assembly sucht.

  • Was ist die Assembly in .net?

Assemblys bilden die grundlegende Einheit für die Bereitstellung, Versionskontrolle, Wiederverwendung, Aktivierungsumfang und Sicherheitsberechtigungen für eine .NET-basierte Anwendung. Assemblys haben die Form einer ausführbaren Datei (.exe) oder (in diesem Fall) dynamic link library (.dll) -Datei und sind die Bausteine ​​von .NET Rahmen.

  • Was ist ein öffentlicher Schlüsseltoken?

Das öffentliche Schlüssel-Token ist eine kleine Zahl, die ein praktisches "Token" ist, das einen öffentlichen Schlüssel darstellt. Öffentliche Schlüssel sind ziemlich lang; Der Zweck des öffentlichen Schlüsseltokens besteht darin, dass Sie sich auf Schlüssel beziehen können, ohne den ganzen Schlüssel zu sagen. So wie man "Der Herr der Ringe" sagt, sind es fünf Wörter, die einen Roman von einer halben Million Wörter darstellen. Es wäre ziemlich unpraktisch, wenn Sie jedes Mal, wenn Sie darüber sprechen wollten, diese eine halbe Million Wörter angeben mussten.

Wenn wir die Definitionen für Assemblys und öffentliche Schlüsseltoken kennen, können wir darüber sprechen.

Wenn Sie Ihrem Projekt Referenzen hinzufügen, sehen sie anders aus.

  • Warum? Was könnte den Unterschied verursachen?

Fügen Sie einen Dateiverweis hinzu. Der Anfangswert der spezifischen Version im Eigenschaftenfenster ist Falsch. Die Datei csproj sieht wie

aus %Vor%

Ändern Sie die spezifische Version im Eigenschaftenbereich in "Wahr". VS fügt Version in das Attribut Include ein.

%Vor%

Ändern Sie die spezifische Version im Bereich Eigenschaften erneut in False. VS fügt ein Kindelement SpecificVersion hinzu.

%Vor%

Also die endgültige Definition scheint zu sein:

Welcher Referenztyp Sie erhalten, hängt davon ab, wie Sie die Assembly verknüpfen.

Ihre Probleme kommen von inkompatiblen Assemblys. Nicht von der Art, wie du sie bezeichnest.

    
Bob Swager 13.07.2017 21:46
quelle

Tags und Links