문제

InternalSvisibleto는 관리되는 C ++ 프로젝트에서 작동하지 않지만 C# 프로젝트를위한 것입니다. 모든 도움이 감사하겠습니다. 여기 단순화 된 레이아웃이 있습니다.

프로젝트 -C#, 액세스하고 싶은 내부 속성이 있습니다. 기원전.
프로젝트 - 관리 된 C ++. 참조 .
프로젝트 -C#, 참조 .

모든 프로젝트는 동일한 키로 서명되었습니다. ildasm 또는 반사기가있는 컴파일 된 어셈블리를 보면 내부 속성 사용을 언급 할 때 모두 올바르게 서명되었음을 보여줍니다.

프로젝트의 AssemblyInfo.cs에서 , 나는 다음과 같은 내부를 가지고있다;

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

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

열쇠가 자르기 때문에 옳다는 것을 알고 있습니다.

컴파일하려고 할 때 A & C. 잘 컴파일하지만 프로젝트 실패합니다

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" )]
도움이 되었습니까?

해결책

나는 이것에 대한 답을 찾았다. C ++는 다른 언어와 다르게 작동합니다. InternalSvisibleto 외에도 참조 어셈블리를 참조해야합니다. 이랑 친구로서 예어. AS_Friend는 참조 추가 대화 상자에서 옵션이 아니기 때문에 프로젝트 참조를 추가 할 수 없으며 대신 필요한 각 CPP 파일에 참조를 추가해야합니다.

#using <A.dll> as_friend

그런 다음 프로젝트 A의 빌드 디렉토리를 포함하려면 조립 검색 경로를 변경해야합니다.

IMHO, 이거야 2 등석 언어 인 C ++의 깨진 및 전형적인. 프로젝트 참조 기능이 없으면 빌드 디버그 또는 릴리스 디렉토리에서 어셈블리를 참조하게됩니다. 이렇게하면 의존성이 깨지며 디버그에서 릴리스로 구성을 변경할 때 올바른 DLL을 참조 할 수있는 유일한 방법은 Ugly #ifdef 디버그 및 #using의 상대 경로입니다.

나는 또한 이것이 언급되지 않았다는 것에 실망했다. InternalSvisibleToattribute 선적 서류 비치. 나는 주위를 파야했다 C ++ 문서 정보를 찾으려면.

편집하다: 문서 InternalSvisisBleto 그 이후로 링크로 업데이트되었습니다 친구 어셈블리 (C ++) 문서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top