web-dev-qa-db-fra.com

Le concepteur n'a pas pu être affiché pour ce fichier car aucune des classes qu'il contient ne peut être conçue

Nous avons le composant partagé suivant:

public class OurServiceBase : System.ServiceProcess.ServiceBase

Cette classe possède les fonctionnalités que nous voulons dans tous nos services en aval, telles que la planification de l'exécution standardisée et la fonctionnalité de journalisation.

Dans un nouveau projet, j'ajoute ce qui suit:

public class MyService : System.ServiceProcess.ServiceBase

Dans Windows Designer, la classe s'affiche correctement.

Quand je change le service pour dériver de OurServiceBase

public class MyService : OurSharedLibrary.OurServiceBase

Le designer cesse de travailler:

Error screenshot

L'erreur complète est la suivante: le concepteur n'a pas pu être affiché pour ce fichier car aucune des classes qu'il contient ne peut être conçue. Le concepteur a inspecté les classes suivantes dans le fichier: EmailProcessor --- La classe de base 'OurSharedLibrary.CienaServiceBase' n'a pas pu être chargée. Assurez-vous que l'Assemblée a été référencée et que tous les projets ont été construits.

Les assemblages appropriés sont référencés, le projet se construit. Je ne comprends pas pourquoi le concepteur se dérobe à ce sujet, car mon service dérive finalement d'une classe pouvant être conçue.

Toutes les suggestions seront les bienvenues.

Plus d'informations sur la pile d'appels du concepteur lorsqu'elle génère l'erreur de ne pas pouvoir concevoir le service dérivé:

at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost Host) 

19/07/2011 14:34 EDT Nouvelle découverte.

La classe "OurServiceBase" existe dans un projet distinct (généralement référencé comme un DLL uniquement). Sur un coup de tête, j'ai copié le fichier de classe de base dans mon projet, construit et ouvert le concepteur. Cela a fonctionné ! Lorsque j'ai à nouveau supprimé le fichier de classe de base et que je suis retourné à la référence externe DLL, le concepteur s'est de nouveau cassé.).

34
The Evil Greebo

Le mieux serait de commencer avec une version de OurServiceBase sans fonctionnalité et de voir si vous pouvez concevoir MyService. Si c'est le cas, ajoutez lentement la fonctionnalité jusqu'à ce qu'elle se casse.

Comme il semble que Visual Studio rencontre un problème de sérialisation de l'un des membres de OurServiceBase.

6
CodeNaked

Vous pouvez également essayer de faire ceci:

  • Fermez toutes les pages de conception d'interface utilisateur
  • Solution propre
  • Créer une solution
  • Ouvrez les pages de conception d'interface utilisateur souhaitées

Cela pourrait ou non aider, mais cela a certainement résolu le même problème dans mon projet.

64
user2327795

Juste au cas où quelqu'un comme moi devrait travailler sur une ancienne base de projet sur Visual Studio 2008 et faire face au même problème.

C'est probablement parce que le chemin du projet contient des caractères exotiques comme C#

Exemple, mon chemin ressemble à ça:

C:\projects\C #\projectname ...

Quand il est renommé

C:\projects\CSharp\projectname ...

Visual Studio est désormais en mesure de reconnaître la classe parent, puis d'ouvrir le formulaire avec le formulaire hérité.

4
Yanik Lupien

Voici une autre solution possible:

Sous les propriétés du projet en cours de construction, ma cible de plate-forme a été définie sur x64. J'ai mis à jour ce "Any CPU", reconstruit mon projet et les concepteurs ont bien ouvert.

Cela explique mieux: le concepteur de Visual Studio en x64 ne fonctionne pas

3
Ausibanez

Vous pouvez également rencontrer ce problème si votre contrôle/service hérite d'une classe générique. Le concepteur ne s'entend pas bien avec les classes abstraites dans la hiérarchie, car il doit les instancier.

2
thomas88wp

J'avais une solution avec 2 projets (l'un référençant l'autre) et je venais d'en définir un pour cibler .Net 4.5.2 et l'autre ciblait 4.5.

Astuce: afficher l'avertissement messages dans la liste d'erreurs:

Il y avait un décalage entre l'architecture de processeur du projet en cours de construction "MSIL" et l'architecture de processeur de la référence "C: .... dll", "x86". Cette incompatibilité peut entraîner des échecs d'exécution. Veuillez envisager de modifier l'architecture de processeur ciblée de votre projet via Configuration Manager afin d'aligner les architectures de processeur entre votre projet et les références, ou de prendre une dépendance sur les références avec une architecture de processeur qui correspond à l'architecture de processeur ciblée de votre projet.

1
Jeremy Thompson