2017-07-25 3 views
0

gars Grreting,Classes de référence interne dans des outils tiers DLL

Un problème me tracasse depuis quelques jours et je pensais que peut-être il est temps que je le partage avec la communauté.

J'ai besoin d'apporter des modifications à un ancien projet dans la corp. Cette DLL référence une DLL tierce et utilise une classe interne dans cette DLL. La DLL référencée avait ce fichier déclaré en tant qu'ami ou InternalVisibleTo était défini sur ce nom de fichier et publicToken. Maintenant, je veux que la DLL référencée me permette d'accéder à son contenu interne mais dans mon projet j'obtiens l'erreur "'BlaBla' est inaccessible en raison de son niveau de protection" qui indique clairement qu'il ne me permettra pas d'accéder à un Classe interne d'une nouvelle DLL.

Solutions J'ai essayé jusqu'à présent:

  1. Utilisé Ildasm sur la DLL référencée et dans le fichier il dans la section InternalVisibleTo pour mon dossier, j'ai enlevé toute PublicTokenKey. Ilasm encore mais pas de succès.

  2. Fait un nouveau nom fortement typé pour ma DLL même que le nom qu'il avait auparavant, mais cela n'a pas fonctionné.

    ilasm foo.dll/dll

Alors maintenant, je suis resté ici incapable d'aller plus loin. J'apprécie vraiment toute aide ou discussion liée à cette question.

PS: Je veux partager une question très semblable, que je suivais la ligne par ligne et cela n'a pas https://stackoverflow.com/a/12202623/861489

Répondre

0

OK, il semble que j'ai enfin réussi à briser le sort! Je partage avec vous les gars pour quiconque est venu ici à l'avenir.

Le processus était correct, Le seul problème était la déclaration d'amitié dans le manifeste Dll référencé. J'ai utilisé "JustDecompile" outil de Rad outils et vu le problème JustDebug Screen

Vous voyez le Dll I déclaré comme un ami a été défini wierdly! J'ai découvert qu'il n'y a aucun moyen que je peux le faire dans l'éditeur de fichiers IL sans faire d'erreurs. J'ai donc utilisé le "JustDecompile" pour décompiler le code pour moi et faire le projet. Il y avait tellement d'erreurs et n'a pas compilé. Mais je m'en foutais. J'ai supprimé tous les fichiers de code et ajouté un fichier de code vide. Puis, dans le fichier AssemblyInfo.cs, j'ai trouvé les déclarations de tags InternalVisibleTo que je cherchais. J'ai changé mon dossier prévu et ai enlevé le PublicTokenKey de lui et ai compilé le projet avec le dossier de 1 cs. Je l'ai juste jeté et j'ai obtenu le nouveau record dans le fichier manifeste! J'ai utilisé ce nouvel enregistrement dans mon ancien fichier manifeste et ilasm. mettez-le dans mon projet et vola! Ça marche! Dieu c'était amusant!