Laden...

Was hat AssemblyKeyFile("") zu bedeuten? (InternalsVisibleTo Probleme)

Erstellt von Seikilos vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.842 Views
S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren
Was hat AssemblyKeyFile("") zu bedeuten? (InternalsVisibleTo Probleme)

Mir ist aufgefallen, dass ich bei einem Projekt keine Unit Tests nutzen kann, weil diese auf Internals von einer Assembly zugreifen müssen:


[assembly: InternalsVisibleTo("Tester")]

->

error CS1726: Friend assembly reference 'Tester' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Ok. Verwirrung ist bei mir groß. Das heißt doch, die Anwendung ist strong named. Oder?
Ich hab die betroffene Executable ohne das Internals gebaut und mal mit sn.exe gecheckt:

 $ sn.exe -T app.exe
app.exe does not represent a strongly named assembly

Öh? Was? In den Settings ist bei der Anwendung das Sign Assembly auch deaktiviert.

Wie kommt .net auf die idee, dass es strong-named ist?

Dann hab ich die AssemblyInfo.cs genauer angeguckt, ganz unten steht noch ein Block:


[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

Aber was bedeutet das? Heißt das, dass kein Strong-name erzeugt wird, oder ist das ein Artefakt von .net 2.0 und bewirkt, dass ich keinen Key haben, aber dennoch strong-named bin???

App.exe (nicht von mir) wird mit VS 2008 und Framework 2.0 kompiliert, mein Tester mit 3.5.

Life is a short

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

der Strong-Name kann entweder durch das AssemblyKeyFileAttribute oder die Compileroption /keyfile gesetzt. Letzteres ist in VS auch über die Projekteigenscahften möglich.

Das Problem liegt jedoch darin dass beim InternalsVisibleTo auch der Public Key der "Friend"-Assembly angegeben werden muss. Siehe dazu das Beispiel in der Doku.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren

Das mit dem Public Key ist aber nur nötig, wenn strong-named Assemblies im Spiel sind, oder? Und ich sehe nicht, wo das der Fall sein soll.

Die Anwendung hat kein /key und signiert sicht meiner Meinung nach ja auch nicht, das hab ich durch sn.exe gecheckt.
Das heißt es sollte garkein Public Key geben

Life is a short

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

laut Fehlermeldung müsste 'Tester' einen Strong-Name haben.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren

Ne, ist auch nicht strong named.

Wie gesagt, wenn ich diesen AssemblyKey Block aus der App rausnehme, dann meckert er ja nicht mehr

Life is a short