Y compris un service de référence à partir d'une bibliothèque de classe
J'ai une bibliothèque de classes C# et un projet de démarrage (une application console). La bibliothèque de classe inclut un service de référence à un service web. Lorsque j'essaie d'exécuter le projet, j'obtiens une exception InvalidOperationException parce que le projet de démarrage n'est pas la lecture de la bibliothèque de classes de l'application.config, et c'est en ignorant le service de référence. Pour qu'il fonctionne, je suis obligé d'ajouter le même service de référence au démarrage du projet. Est il possible que je peux l'éviter? Puis-je effectuer le démarrage du projet reconnaissent la bibliothèque de classe de service de référence et d'application.config sans avoir à le copier dans le démarrage du projet?
J'ai essayé d'ajouter un lien vers l'application.config à partir de la bibliothèque de classe, mais qui ne fonctionne pas. La bibliothèque de classe n'est pas très portable si elle exige de la personne qui l'utilise pour ajouter que le service de référence au démarrage du projet.
- +1: Hey Zarjay, j'allais poser la même question. Alors que je suis d'accord avec Andrew Hare, et de comprendre pourquoi il n'est pas possible, j'ai trop d'accord la solution n'est pas vraiment de la Bibliothèque très portable. Je me demande, peut la configuration sera appliquée par programmation?
- Je ne suis pas sûr, mais j'en doute. Excellente idée, cependant. Je sais que c'est possible d'écrire dans le fichier de config, mais je parie que par le temps que votre code est capable, il est probablement trop tard pour ajouter une référence de service.
Vous devez vous connecter pour publier un commentaire.
Pensez à ce que vous êtes en train de faire - vous avez deux assemblées que vous êtes de construction:
Ces deux assemblées ont des fichiers de configuration - j'imagine qu'ils ressembler à quelque chose comme ceci:
Lorsque vous exécutez
ConsoleApp
il n'a aucun moyen de lecture ou de savoir abooutapp.config
de votreLibrary
de l'assemblée. Le seul fichier de configuration qu'il sait ou se soucie estConsoleApp.exe.config
. Maintenant, il est possible d'avoir des fichiers de configuration de référence les uns des autres, mais ce n'est pas la bonne solution pour ce que vous essayez de faire.Depuis votre
Library
assemblée n'a pas de point d'entrée, il ne sera jamais chargé dans un domaine d'application. Car il ne sera jamais chargé dans un domaine d'application de son fichier de configuration d'application ne seront jamais utilisés.Ce que vous devez faire est de référence
Library
dansConsoleApp
par l'intermédiaire d'un projet de référence. Puis déplacer toutes les données de configuration à partirapp.config
enConsoleApp.exe.config
que c'est le fichier de configuration qui sera utilisée par votre application.Cela vous permettra d'avoir deux choses que vous devez appeler des méthodes sur votre web service
Library
qui permet d'envoyer et de recevoir des messages SOAP.Library
à la fonction.Une alternative à l'utilisation d'un service de référence dans la bibliothèque de classe et la copie de la config serait d'utiliser les événements de construction de cet appel svcutil.exe. La chose que j'aime, c'est que vous n'avez pas à faire de mise à jour "service de référence" lorsque le service des modifications. Il sera mis à jour automatiquement.
Dans la bibliothèque de classe, utiliser un événement de construction qui génère le code proxy:
Dans l'application, utilisez un créer un événement qui génère le fichier de configuration. Vous pouvez utiliser le /mergeConfig option pour fusionner dans une application existante.config.
Si vous ne voulez pas d'obtenir une erreur de compilation si le service n'est pas en cours d'exécution, mettre ceci dans votre fichier de projet et vous obtiendrez un avertissement au lieu d'une erreur:
Vous pouvez copier les parties pertinentes de l'application.config à partir de la classe de la bibliothèque de la configuration de l'application.config pour l'application console.
Alternativement, si vous êtes vraiment essayer de faire ce vraiment portable, vous aurez besoin de penser à une autre façon de référencer l'adresse pour le service de référence à partir de la bibliothèque de classe.
Vous suffit de copier la configuration de clé, pointant vers le service, à partir de votre bibliothèque de classe fichier de configuration de votre application console de fichier de configuration.
Je penserais plus de confusion si vous aviez plusieurs fichiers de configuration de courir.
Si une bibliothèque a des éléments configurables, je voudrais attendons à avoir à mettre de la configuration dans mon fichier de config pour bien consommer de la bibliothèque.