Question

J'ai une bibliothèque C # avec beaucoup de fonctionnalités internes exposant seulement quelques classes publiques et interfaces. Je voudrais partager ce code entre plusieurs projets, et chaque projet peut avoir besoin d'étendre les classes internes avec des sous-classes.

Je n'aime pas l'idée de rendre toutes ces classes publiques afin de créer une bibliothèque commune. Je pense que cela les expose trop à une décompilation facile et briser la conception.

Est-ce la seule vraie option pour créer une copie du code source et garder ces fichiers synchronisés entre les projets? Ou existe-t-il un moyen de partager du code et d'obtenir toujours une seule bibliothèque pour chaque projet exposant uniquement les quelques interfaces et classes publiques prévues?

J'utilise Visual Studio 2010.

METTRE À JOUR

Merci pour les éclaircissements concernant la décompilation et l'accès "privé". Je pense que je pourrais envisager d'appliquer un obscurcisseur sur plusieurs bibliothèques d'entrée, tous ensemble, espérons que l'obscurcissant même ses connexions publiques.

Du point de vue de la conception, il semble que la réponse soit définitivement d'utiliser des assemblées d'amis.

Était-ce utile?

La solution

Vous voudrez peut-être envisager de faire des assemblées d'amis:

http://msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx

[assembly:InternalsVisibleTo("someassembly")]

Autres conseils

Créer un nouveau projet. Fichier> Ajouter> existant. Sélectionnez les fichiers de code existants. Appuyez sur le bouton déroulant sur le bouton Ouvrir et choisissez le lien.

Faire des cours internes vs publics a absolument nul la capacité de sa capacité à être décompilée.

Vous pouvez accomplir cela en utilisant le Internesvisibletoattribute sur votre assemblée

Je pense que cela les expose trop à une décompilation facile

Vous êtes alors en train de choc, car même les classes privées dans une assemblée peuvent être décalées trivialement et utilisées pour créer une implémentation publique.

"Breaks the Design" est un autre problème. Si vous souhaitez utiliser ce code à partir de projets distincts, rendre les choses publiques est exactement la bonne chose à faire. Si vous ne voulez pas les rendre publics, réfléchissez à l'interface que ce projet veut vraiment exposer à l'extérieur qui accomplira toujours ce dont vous avez besoin ... et construire cette API et faire ce Publique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top