7

Bevor ich gehe auf I InternalsVisibleTo attribute ain’t workin'!InternalsVisibleTo Attribut funktioniert nicht

dieser durchlaufen hat daher der Titel

Okay, so ich eine funktionierende Version von meinem Projekt hatte, das so etwas wie die folgenden verwendet wurde.

[assembly: InternalsVisibleTo("Stuff.Test.Support, PublicKey="0024000004800000940000000302000000240000525341310004000001000100d158cd56401c3d90b52ca1a5f273d608c3ce12aaa21385b0f4ad7dc1b747e45ee1f1771c104c52cb4da1b587ae38b6d36fa1d8e8f14003c42f700bc62ef2ec04b231c5d930e4bc3691aa1ef7b6713926316d4be1165ede086e94190b44edd4ad0d024230ae6eb9deb728b00d71d1d468b20a9bb78f242bd6c41e640c2e5c0cd5")] 

In der Datei Properties/AssemblyInfo.cs mit den internen Sachen, auf die ich zugreifen möchte. Vor dem Einchecken funktionierte es. aber nach der Fusion auf Team Foundation IDK WTF ist falsch, aber es ist wie meine AssemblyInfo.cs nicht das Attribut sehen, aber ich habe überprüft, dass nichts in der Datei geändert hat, aber immer noch bekomme ich die "innaccessable due to its protection level." Fehler. (Gama Radiation? Sunspot? Die kleinen bösen Zwergen, die Bugs trainieren Code in nicht funktionierenden Code tweek arbeiten lol)

Ich habe versucht, das Hinzufügen nur die einzelnen Instanzen Reflexion mit ...

Assembly Core = Assembly.LoadFile("C:\Stuff.Internal.Core\bin\Debug\Stuff.Internal.Core.dll"); 

Object AssmWithIdentifier = Core.CreateInstance("AssemblyWithIdentifer", false); 

Wenn ich versuche, dies bekomme ich 'Stuff.Internal.AssemblyWithIdentifer' is inaccessible due to protection level.

Ansonsten, wenn ich etwas auskommen, was mit den internen Sachen zu tun hat, kompiliert mein Projekt ganz gut.

Ich doppelt überprüft meine „PublicKey“ mit Red Gates Reflector

und ich habe auch versucht, privateObjects möglicherweise Zugriffsmethoden auf diese Weise aber egal, mit wie ich versuche ich nicht intern etwas instanziieren kann.

Ich habe auch versucht, einfach ein neues Projekt hinzufügen, kompilieren sie jede Referenzierung und ja, dass tatsächlich funktioniert, aber danach versuchte ich ein neues Projekt zu erstellen und fügen Sie alle Sachen in "Stuff.Test.Support" -Projekt, um Referenzen aufzunehmen und dergleichen, und fügen hinzu, dass die AssemblyInfo.cs, die in in dem Projekt, das ich wünsche, aber für den Zugriff, sobald ich zu kompilieren versuchen, bekomme ich die gleichen Fehler "innaccessable due to its protection level."

Edit: ich habe vergessen zu erwähnen, ich bin Verwenden einer sharedAssembly.cs, die die Assemblys global verwaltet und mehrere Attribute aufweist, die auf ähnliche Weise wie das Beispiel assembly: InternalsVisibleTo Attribut, das ich am Anfang dieser Frage gezeigt habe, eingerichtet wurden . Ich verwende auch Strong Named Assemblies, wenn das etwas ist, das nicht durch mein Beispiel hervorgehoben wird.

+2

Hey, vielleicht sollten Sie alle Workflow-Definitionen aus diesem Projekt entfernen! Probieren Sie das aus. – Will

+0

OMG das funktioniert. Vielleicht sollten Sie das als Antwort aufschreiben, damit Sie tatsächlich etwas dafür bekommen können. – Terrance

Antwort

4

Stellt sich heraus Workflow-Definitionen verursachten die Diskrepanz. Immer noch versuchen, herauszufinden, warum, obwohl .....
Nun, wenn jemand einen Link zu etwas erklären kann, warum wird +1 von mir bekommen.

+2

Was haben Sie getan, um es zu reparieren? –

+0

Ich habe alle Workflow-Definitionen im Projekt entfernt. Nicht die beste Antwort, aber es funktioniert jetzt. Und es gibt derzeit einen Fehlerbericht an Microsoft dafür. Und der Link ist https://connect.microsoft.com/VisualStudio/feedback/details/588710/internalsvisibleto-fails-when-mixed-with-wf4-0-activity-definitions-and-custom-activities – Terrance

+0

Wie funktioniert Workflow Definitionen ??? – RouR

2

1) Wenn InternalsVisibleTo richtig eingerichtet ist, sollten Sie keine Reflektion benötigen, um sie vom 'Freund' zu instantiieren, es kann einfach nur ctor's und ähnliches benutzen. Ich würde diesen Weg gehen, damit die VS IDE Ihnen schnelleres Feedback geben kann, ob die Interna wirklich für das Zielprojekt sichtbar sind.

2) Wie haben Sie nach der Fehlermeldung, die Sie später erhalten haben, versucht, InternalsVisibleTo ("Stuff.Test.Support")?

+0

1) Ich habe versucht, Reflektion als Alternative zur Verwendung von InternalsVisibleTo zu verwenden, da es momentan nicht funktioniert. Ich bastle gerade mit Nachdenken und sehe, ob ich etwas vermisse. 2) Ich verwende derzeit stark benannte Assemblys, damit ich den Fehler Friend Assembly-Referenz 'Stuff.Tests.Support' ist ungültig. Mit starkem Namen signierte Assemblys müssen in ihren InternalsVisibleTo-Deklarationen einen öffentlichen Schlüssel angeben. \t Tut mir leid, ich habe nur meine Frage geändert, um ein bisschen mehr Informationen über meine Einrichtung zu verraten. Vielleicht könnte dir das besser helfen. – Terrance