我正在使用Castle Windsor for SL v2.5.1.0。我有它的代理內部類(當然,接口是公共的,但實現是內部的,所以消費者只知道接口)。Castle Windsor InternalsVisibleTo Silverlight
我用下面的屬性在我的組裝與內部類
[assembly: InternalsVisibleTo("Castle.Core, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("Castle.Windsor, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
在完整的.NET 4.0模式,與.NET 4.0城堡組件,這工作得很好,我的類型代理確定。在Silverlight中,與Silverlight的城堡組件,我得到:
Type ConsoleApplication4.MyTypeToBeProxied is not public. Can not create proxy for types that are not accessible.
另外,剛剛在排查故障時,把下面的,似乎沒有什麼區別...:
[assembly: InternalsVisibleTo("System.Core, PublicKey=00000000000000000400000000000000")]
[assembly: InternalsVisibleTo("System.Core, PublicKey=" +
"00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649" +
"383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb7" +
"7e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638" +
"fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c" +
"123b37ab")]
,我已經在運行時也驗證了SL中動態託管程序集的名稱實際上仍然是DynamicProxyGenAssembly2。
任何想法?謝謝。
編輯:
我發現我想這個問題:
城堡的.NET 4.0有:
private bool IsAccessible(Type target)
{
// ....
return ((target.IsPublic || target.IsNestedPublic) || internalAndVisibleToDynProxy);
}
在DefaultProxyBuilder
...和SL 4具有
private bool IsAccessible(Type target)
{
target.IsNested();
return (target.IsPublic || target.IsNestedPublic);
}
這是可以固定在C ast源?或者我需要/應該爲DefaultProxyFactory子類?
嗯有趣的 - 所以我想這裏的關鍵區別可能是你簽署生成的程序集與你自己的程序集相同的密鑰,而通常如果DP生成強命名的程序集它使用城堡的密鑰簽名。所以我** **猜測**或許規則是,如果A具有B作爲朋友並且兩者都使用相同的密鑰簽名,則可以使用組裝A中的內部類型。 – 2010-11-17 02:45:42
感謝您的調查 - 將其放置在問題跟蹤器中,我們將考慮將其燒入vNext中。 – 2010-11-17 02:46:19
感謝您的快速跟進! – Jeff 2010-11-17 02:54:53