Estoy usando Castle Windsor para SL v2.5.1.0. Lo tengo clases internas de proxy (las interfaces son públicas, por supuesto, pero la implementación es interna, de modo que el consumidor solo conoce la interfaz).Castle Windsor InternalsVisibleTo Silverlight
estoy usando los siguientes atributos en mi montaje con las clases internas
[assembly: InternalsVisibleTo("Castle.Core, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("Castle.Windsor, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
En el modo completo .NET 4.0, con los montajes del castillo de .NET 4.0, esto funciona bien y mis tipos se aproxima OK. En Silverlight, con los conjuntos de Castillo de Silverlight, me sale:
Type ConsoleApplication4.MyTypeToBeProxied is not public. Can not create proxy for types that are not accessible.
Además, sólo para solucionar el problema, añadiendo lo siguiente parece hacer ninguna diferencia ...:
[assembly: InternalsVisibleTo("System.Core, PublicKey=00000000000000000400000000000000")]
[assembly: InternalsVisibleTo("System.Core, PublicKey=" +
"00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649" +
"383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb7" +
"7e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638" +
"fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c" +
"123b37ab")]
y no tengo también se verificó en tiempo de ejecución que el nombre del ensamblado hospedado dinámicamente en SL todavía es de hecho DynamicProxyGenAssembly2.
¿Alguna idea? Gracias.
EDITAR:
me encontré con el problema que pienso:
Castillo en .NET 4.0 tiene:
private bool IsAccessible(Type target)
{
// ....
return ((target.IsPublic || target.IsNestedPublic) || internalAndVisibleToDynProxy);
}
en el DefaultProxyBuilder ... y SL 4 tiene
private bool IsAccessible(Type target)
{
target.IsNested();
return (target.IsPublic || target.IsNestedPublic);
}
Esto es algo que se puede arreglar en la C ¿fuente astle? ¿O debo/debo subclasificar la DefaultProxyFactory?
Hmm interesante, así que supongo que la diferencia crítica aquí puede ser que firmes el ensamblaje generado con la misma clave que tus propios ensamblajes, mientras que normalmente si DP genera un ensamblaje con un nombre fuerte, está firmado con la clave de Castle. Así que estoy ** adivinando ** que quizás la regla es que puedes usar el tipo interno del ensamble A en Assebly B si A tiene a B como amigo y ambos están firmados con la misma clave. –
Gracias por investigarlo. Póngalo en el rastreador de problemas y lo analizaremos para vNext. –
¡Gracias por el seguimiento rápido! – Jeff