7

Antes de continuar Lo que ir a través de este InternalsVisibleTo attribute ain’t workin'!InternalsVisibleTo atributo no está funcionando

De ahí el título

Bueno por lo que tenía una versión de trabajo de mi proyecto que estaba usando algo como lo siguiente.

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

En el archivo Properties/AssemblyInfo.cs con las cosas internas a las que quiero acceder. Antes de iniciar sesión, estaba funcionando. pero después de fusionarme en Team Foundation IDK WTF es incorrecto, pero es como si mi AssemblyInfo.cs no viera el atributo, pero verifiqué que nada ha cambiado en el archivo, pero sigo obteniendo el error "innaccessable due to its protection level.". (Gama radiación? Mancha solar? Los pequeños gnomos malvados que capacitan a los insectos a tweek de trabajo de código en código no funciona lol)

He tratado simplemente añadiendo los casos individuales utilizando la reflexión ...

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

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

Cuando intento esto obtengo 'Stuff.Internal.AssemblyWithIdentifer' is inaccessible due to protection level.

De lo contrario, si comento algo que tenga que ver con las cosas internas, mi proyecto compila muy bien.

me doble registrado mi "PublicKey" con Red Puertas Reflector

y también he intentado usar privateObjects a los métodos de acceso, posiblemente, de esa manera, pero no importa cuanto lo intento no puedo crear una instancia de algo interno.

También intenté simplemente agregar un nuevo proyecto, recopilando cualquier referencia y sí que realmente funcionó, pero después intenté crear un nuevo proyecto y agregar todo el material en el proyecto "Stuff.Test.Support" para incluir referencias y similares, y añadir que a los AssemblyInfo.cs que en el proyecto que quisiera acceder, pero, una vez que lo intento de compilar me sale el mismo error "innaccessable due to its protection level."

Editar: me olvido de mencionar que soy utilizando un SharedAssembly.cs que gestiona globalmente los ensamblados y tiene varios atributos configurados de forma similar al atributo de ejemplo assembly: InternalsVisibleTo que he mostrado al comienzo de esta pregunta . También estoy usando ensamblajes Strong Named si eso es algo que mi ejemplo no resalta.

+2

¡Oye, quizás debas eliminar cualquier definición de flujo de trabajo de ese proyecto! Pruébalo. – Will

+0

OMG que funciona. Tal vez deberías dejar eso como respuesta para que puedas obtener algo de credibilidad por ello. – Terrance

Respuesta

4

Resulta las definiciones de flujo de trabajo estaban causando la discrepancia. Todavía estoy tratando de averiguar por qué, aunque .....
Bueno, si alguien puede proporcionar un enlace a algo que explica por qué obtendrá +1 de mí.

+2

¿qué hiciste para arreglarlo? –

+0

Eliminé todas las definiciones de flujo de trabajo en el proyecto. No es la mejor respuesta pero funciona ahora. Y actualmente hay un informe de error para Microsoft. Y el enlace es https://connect.microsoft.com/VisualStudio/feedback/details/588710/internalsvisibleto-fails-when-mixed-with-wf4-0-activity-definitions-and-custom-activities – Terrance

+0

¿Cómo resulta el flujo de trabajo? definiciones ??? – RouR

2

1) si InternalsVisibleTo está configurado correctamente, no debería necesitar reflexión para crear una instancia del 'amigo', puede usar simplemente ctor's y elementos similares directamente. Me gustaría ir por esta ruta para que el VS IDE pueda darle una retroalimentación más rápida sobre si los internos son realmente visibles para el proyecto de destino.

2) según el mensaje de error que recibió más tarde, ¿ha probado InternalsVisibleTo ("Stuff.Test.Support")?

+0

1) He intentado usar la reflexión como alternativa al uso de InternalsVisibleTo ya que no está funcionando actualmente. Actualmente estoy jugando con la reflexión y viendo si hay algo que extraño. 2) Actualmente estoy usando ensamblados de nombre seguro, así que obtengo el error La referencia del ensamblado de amigo 'Stuff.Tests.Support' no es válida. Los ensamblados firmados de nombre fuerte deben especificar una clave pública en sus declaraciones de InternalsVisibleTo. \t Lo siento, modifiqué mi pregunta para divulgar un poco más de información sobre mi configuración. Entonces tal vez eso podría ayudarte mejor. – Terrance

Cuestiones relacionadas