webentwicklung-frage-antwort-db.com.de

Wie erkläre ich eine Freundschaftsversammlung?

Ich habe 2 Projekte in meiner Lösung:

  1. Assembly (Basisbibliothek)
  2. Test Assembly (NUnit)

Ich hatte die Testversammlung als Freundesversammlung im ersten Projekt erklärt:

[Assembly: InternalsVisibleTo ("Company.Product.Tests")]

Alles hat gut funktioniert, bis mir klar wurde, dass ich vergessen habe, die Lösung zum Signieren meiner Baugruppen einzurichten. Erstellen Sie also eine snk-Datei und richten Sie das Visual Studio-Projekt ein, um die erste Assembly (Basic Library) zu signieren. Jetzt, wenn ich das erste Projekt kompiliere, erhalte ich folgende Fehlermeldung:

Die Friend Assembly-Referenz 'Company.Product.Tests' ist ungültig. Mit starken Namen signierte Assemblys müssen in ihren InternalsVisibleTo-Deklarationen einen öffentlichen Schlüssel angeben.

Ich habe versucht, den öffentlichen Schlüssel mit dem Dienstprogramm sn aus meiner snk-Datei zu extrahieren, aber es wird eine verdrahtete Binärdatei generiert, deren Verwendung ich nicht sicher bin. Wie kann ich das Problem beheben?

108
Hemant

Sie müssen beide Assemblys signieren, da beide Assemblys effektiv aufeinander verweisen.

Sie müssen den öffentlichen Schlüssel in das Attribut InternalsVisibleTo einfügen. Zum Beispiel verwende ich in Protokollpuffern:

[Assembly:InternalsVisibleTo("Google.ProtocolBuffers.Test,PublicKey="+
"00240000048000009400000006020000002400005253413100040000010001008179f2dd31a648"+
"2a2359dbe33e53701167a888e7c369a9ae3210b64f93861d8a7d286447e58bc167e3d99483beda"+
"72f738140072bb69990bc4f98a21365de2c105e848974a3d210e938b0a56103c0662901efd6b78"+
"0ee6dbe977923d46a8fda18fb25c65dd73b149a5cd9f3100668b56649932dadd8cf5be52eb1dce"+
"ad5cedbf")]

Der öffentliche Schlüssel wird durch Ausführen abgerufen

sn -Tp path\to\test\Assembly.dll

Alternativ können Sie es auch aus der .snk-Datei herunterladen:

sn -p MyStrongnameKey.snk public.pk
sn -tp public.pk
187
Jon Skeet