D’abord le contexte: j’utilise un Visual Studio C# Express 2005.
J’ai deux projets dont l’un fait office de “client” et l’autre de “serveur”. Ces deux projets utilisent une Dll, qui dépend soit de XNA, soit d’une autre DLL mimant une partie du Framework XNA (pour le serveur, j’ai besoin des classes Vector3, etc…). J’ai deux fichiers csproj différents pour cette DLL naturellement, qui référencent soit XNA, soit ma DLL d’émulation. Les fichiers contenant le code de cette DLL sont communs, je fais une compilation conditionelle (avec un bon vieux #define) pour indiquer si je dois utiliser XNA ou la DLL.
On a donc d’un coté:
XNA + DLL commune compilée en client + client
Et de l’autre
Emulation XNA + DLL commune compilée en serveur + serveur
Tout se passe presque bien… sauf dans le cas suivant:
- Je lance l’IDE avec le projet du client
- Je lance l’IDE avec le projet du serveur
- Je compile le serveur
- Je lance le serveur en mode débogage
- Je compile le client: ERREUR (voir en dessous)
Celui ci me cherche des référence sur la DLL d’émulation utilisée par le serveur. Cela ne me le fait que si le serveur est LANCE et mode débogage. Je peux lancer l’exe du serveur à la main, ca passe bien et je peux compiler sans problème le client. Le contraire est aussi vrai: si je compile + lance le client, la compilation du serveur va chercher des références à XNA. Ma DLL commune a pourtant deux répertoires de compilation différents: bin/Client/… et bin/Server/… donc je ne pense pas que ca soit du a un écrasement quelconque d’un fichier ?
Encore plus curieux, si je fais un “Rebuild All” sur le client alors que le serveur est lancé, la compilation va marcher, et le client se lancer (mais c’est un peu lourdingue de devoir à chaque fois recompiler le tout).
Etant un cas forcément un peu bizarre, Google n’a pas vraiment été mon ami sur ce coup là… Il est aussi fortement possible que je m’y prenne mal pour “partager” un code entre un client et un serveur ayant des dépendances que je ne souhaite pas retrouver sur le serveur (XNA), mais dans ce cas là, j’ai besoin de vos lumières pour savoir comment organiser mon code…
edit de punition pour moi: indiquer clairement les topics, la prochaine fois.
Je me réponds à moi même:
J’étais dans une fausse problématique, étant donné que à la base, j’aurai souhaité que le serveur tourne sous un linux (me demandez pas pourquoi). Après une discussion sur IRC avec AnA-L, il se trouve que toutes les classes et structures ne nécéssitant pas d’appel à l’hardware (donc les structure que je souhaitais récupérer, comme Matrix, Quaternion, et VectorX) fonctionnent sans problème sous linux, pour peu qu’on fournisse la Dll avec.
Donc je peux sans problème utiliser la même référence \o/.
Ps: merci à AnA-L ca m’ôte une sacré épine du pied.