Ich versuche einige Interna zu meinem Unit-Test-Projekt zu enthüllen mit:
%Vor%Aber ich bekomme den Fehler:
Fehler 1 Freundschaftsreferenz MyTest 'ist ungültig. Starker Name signierte Assemblys müssen einen öffentlichen Schlüssel in ihrem Namen angeben InternalsVisibleTo-Deklarationen. ... / MyClass.cs ...
Wenn ich einen PublicTokenKey manuell zuweisen:
%Vor%Die Lösung wird ohne Fehler erstellt.
Also, Was ist der beste und sicherste Weg, meinem Testprojekt einen öffentlichen Schlüssel zuzuweisen?
Ich bin überrascht, dass PublicKeyToken
sogar funktioniert - auf meinem Rechner zwingt es mich, PublicKey
Der Grund, warum Sie ein Token mit einem öffentlichen Schlüssel benötigen, ist, dass Assemblys mit starkem Namen in den GAC eingefügt werden können, der eine hohe Vertrauenswürdigkeit besitzt. Es wäre eine Sicherheitslücke, wenn eine Assembly namens "MyTest" (die möglicherweise nicht vertrauenswürdig ist - z. B. ein Steuerelement im Browser) in die Interna einer GACed-Assembly aufrufen könnte. Es möchte, dass der öffentliche Schlüssel diese Art von Hack verhindert.
Dies sollte nichts in der Produktion brechen - auch wenn die Assembly nicht gefunden werden kann. Dieses Attribut wird während der Kompilierungszeit und nicht zur Laufzeit verwendet.
Was ist der sicherste Weg?
Wenn Sie sich wirklich Sorgen darüber machen, dass der Produktionscode unterbrochen wird, entfernen Sie das Attribut während der Erstellung der Version:
%Vor% Wenn Sie ein paar Projekte haben, die das öffentliche Schlüsseltoken benötigen (und Sie haben ein einziges Schlüsselpaar, was Sie tun sollten), könnten Sie auch eine Datei wie AssemblyInfo.global.cs
definieren und sie allen Ihren Projekten als verknüpfte Datei hinzufügen :
Dies vereinfacht Dinge (besonders wenn Sie PublicKey
verwenden müssen, was wirklich ist):
Tags und Links .net c# unit-testing visual-studio internalsvisibleto