【发布时间】:2010-09-29 21:23:22
【问题描述】:
InternalsVisibleTo 不适用于我的托管 C++ 项目,但它适用于我的 C# 项目。任何帮助,将不胜感激。这是一个简化的布局。
项目 A - C#,有一个我想从 B/C 访问的内部属性。
项目 B - 托管 C++。参考文献A。
项目 C - C#,引用 A。
所有项目都使用相同的密钥进行签名。查看使用 ILDASM 或 Reflector 编译的程序集表明它们都已正确签名(当我注释掉内部属性使用时)。
在项目 A 的 AssemblyInfo.cs 中,我有以下 InternalsVisibleTo;
[assembly: InternalsVisibleTo( "B, " +
"PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
"50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
"0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
"9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
"4306008535049A0EBB00FE47E78DCB" )]
[assembly: InternalsVisibleTo( "C, " +
"PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
"50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
"0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
"9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
"4306008535049A0EBB00FE47E78DCB" )]
键是剪切粘贴的,所以我知道它们是正确的。
当我尝试编译时,A & C 编译正常,但项目 B 失败并显示
Error 1 error C3767: 'A::MyClass::MyProperty::get': candidate function(s) not accessible c:\Users\<snip>\CppClass.cpp 201 B
MSDN 文档说这适用于 C++。是否有错误或其他我需要做的事情?
还有其他方法可以保护属性,使其只能由我签名的程序集使用吗?我知道我可以保护我的所有程序集,但我可以像这样在粒度级别上做到这一点吗?
编辑
根据MSDN中的cmets,我把属性改成如下,还是不行。
[assembly: InternalsVisibleTo( "B, " +
"PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
"50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
"0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
"9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
"4306008535049A0EBB00FE47E78DCB" ),
InternalsVisibleTo( "C, " +
"PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
"50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
"0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
"9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
"4306008535049A0EBB00FE47E78DCB" )]
【问题讨论】:
-
请从“c++”重新标记为“c++cli”谢谢
标签: .net c++-cli internalsvisibleto