7

Prima di andare avanti sono andato attraverso questo InternalsVisibleTo attribute ain’t workin'!InternalsVisibleTo attributo non funziona

Da qui il titolo

Va bene così ho avuto una versione funzionante del mio progetto che stava usando qualcosa di simile alla seguente.

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

Nel file Properties/AssemblyInfo.cs con le informazioni interne a cui desidero accedere. Prima di verificarlo, funzionava. ma dopo averlo fuso su Team Foundation IDK WTF è sbagliato ma è come il mio AssemblyInfo.cs non vede l'attributo ma ho verificato che nulla è cambiato nel file, ma ottengo comunque l'errore "innaccessable due to its protection level.". (Gama radiazioni? Sunspot? I piccoli gnomi malvagi che si allenano i bug a tweek codice funzionante in codice non funziona lol)

Ho provato semplicemente aggiungendo le singole istanze utilizzando la riflessione ...

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

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

Quando tento questo ottengo 'Stuff.Internal.AssemblyWithIdentifer' is inaccessible due to protection level.

In caso contrario, se commento qualcosa che ha a che fare con le cose interne, il mio progetto viene compilato correttamente.

Ho ricontrollato la mia "PublicKey" con la Red Gates riflettore

e ho anche provato ad utilizzare privateObjects per, eventualmente, i metodi di accesso che modo, ma non importa quanto mi sforzi non riesco a un'istanza di nulla interno.

Ho anche provato semplicemente ad aggiungere un nuovo progetto, compilando qualsiasi riferimento e sì che ha funzionato, ma dopo di ciò ho tentato di creare un nuovo progetto e aggiungere tutte le cose nel progetto "Stuff.Test.Support" per includere riferimenti e simili, e aggiungere che alle AssemblyInfo.cs che nel progetto che voglio accedere ma, una volta che tento di compilare ottengo lo stesso errore "innaccessable due to its protection level."

Edit: ho dimenticato di menzionare sono utilizzando un SharedAssembly.cs che gestisce globalmente gli assembly e ha diversi attributi impostati in modo simile all'attributo assembly: InternalsVisibleTo di esempio che ho mostrato all'inizio di questa domanda . Sto anche usando gli assembly Strong Named se questo non è reso evidente dal mio esempio.

+2

Ehi, forse dovresti rimuovere qualsiasi definizione del flusso di lavoro da quel progetto! Provalo. – Will

+0

OMG che funziona. Forse dovresti metterlo giù come risposta in modo che tu possa ottenere qualche credito per questo. – Terrance

risposta

4

Risulta che le definizioni di flusso di lavoro causavano la discrepanza. Sto ancora cercando di capire perché però .....
Beh, se qualcuno può fornire un link a qualcosa che spiega perché otterrà +1 da me.

+2

cosa hai fatto per sistemarlo? –

+0

Ho rimosso tutti i difetti del flusso di lavoro nel progetto. Non è la migliore risposta, ma funziona ora. E c'è attualmente un bug report a Microsoft per questo. E il collegamento è https://connect.microsoft.com/VisualStudio/feedback/details/588710/internalsvisibleto-fails-when-mixed-with-wf4-0-activity-definitions-and-custom-activities – Terrance

+0

Come risulta il flusso di lavoro definizioni ??? – RouR

2

1) se InternalsVisibleTo è impostato correttamente, non è necessario eseguire la riflessione per istanziarli da "amico", è possibile utilizzare direttamente i caratteri Ctor e simili. Vorrei seguire questa strada in modo che l'IDE VS possa darti un feedback più veloce sul fatto che gli interni siano realmente visibili al progetto di destinazione.

2) come per il messaggio di errore che hai ottenuto in seguito, hai provato InternalsVisibleTo ("Stuff.Test.Support")?

+0

1) Ho provato a utilizzare reflection in alternativa all'utilizzo di InternalsVisibleTo poiché non funziona attualmente. Attualmente sto armeggiando con la riflessione e vedendo se c'è qualcosa che ho perso. 2) Attualmente utilizzo gli assembly con nome sicuro in modo da ottenere l'errore Il riferimento all'assembly amico "Stuff.Tests.Support" non è valido. Gli assembly firmati con nome sicuro devono specificare una chiave pubblica nelle loro dichiarazioni InternalsVisibleTo. \t Mi dispiace, ho solo modificato la mia domanda per divulgare un po 'più informazioni sulla mia configurazione. Quindi forse potrebbe aiutarti meglio. – Terrance

Problemi correlati