12

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のコメントに基づいて、属性を次のように変更しましたが、それでも機能しません。

[assembly: InternalsVisibleTo( "B, " +
   "PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
   "50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
   "0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
   "9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
   "4306008535049A0EBB00FE47E78DCB" ),
InternalsVisibleTo( "C, " +
   "PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
   "50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
   "0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
   "9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
   "4306008535049A0EBB00FE47E78DCB" )]
4

2 に答える 2