InternalsVisibleTo не работает для моих управляемых проектов C ++, но для моих проектов C #. Любая помощь будет оценена. Вот упрощенный макет.
Проект A - C #, имеет внутреннее свойство, к которому я хочу получить доступ B / C .
Проект B - Управляемый C ++. Список литературы A .
Проект C - C #, ссылки A .
Все проекты подписаны одним и тем же ключом. Просмотр скомпилированных сборок с ILDASM или Reflector показывает, что все они подписаны правильно (когда я закомментирую использование внутреннего свойства).
В AssemblyInfo.cs в проекте A у меня есть следующие 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 ++. Есть ли ошибка или что-то еще, что мне нужно сделать?
Есть ли другой способ защитить свойство, чтобы оно могло использоваться только подписанными мной сборками? Я знаю, что могу защитить всю свою сборку, но могу ли я сделать это на гранулярном уровне, как это?
EDIT
Основываясь на комментариях в MSDN, я изменил атрибут на следующий, но это все равно не работает.
[assembly: InternalsVisibleTo( "B, " +
"PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
"50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
"0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
"9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
"4306008535049A0EBB00FE47E78DCB" ),
InternalsVisibleTo( "C, " +
"PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
"50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
"0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
"9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
"4306008535049A0EBB00FE47E78DCB" )]