2010-08-05 19 views
2

Je suis en train de retravailler le code de quelqu'un d'autre. beaucoup de code qui ne devrait pas être là (accès aux données, logique métier, tout y a été lentement poussé). J'ai déplacé le code approprié dans les classes préexistantes appropriées et créé une nouvelle classe auxiliaire distincte dans le projet approprié, mais toutes mes références à cette classe ne fonctionnent tout simplement pas.C# asp.net - Le type ou le nom de l'espace de noms 'Helper' est introuvable (manque-t-il une directive using ou une référence d'assembly?)

Voici une vue simple de l'apparence de ma classe (les noms sont légèrement modifiés);

namespace Company.Web.Application.Reporting 

{ 
    public class ReportHelper 
    { 
    here I have a bunch of methods 
    } 
} 

et voici comment il est référencé;

using Company.Web.Application.Reporting; 

namespace Company.Web.Application.App.Reports 
{ 
    public partial class PlansReports : PageBase 
    { 
     //This is the problem part 
     private ReportHelper Helper = new ReportHelper(); 
     heaps of other code with no problems here... 
    } 
} 

Mon problème est que j'obtiens l'erreur suivante, partout où j'essaie d'accéder à mon nouvel assistant.

n'a pas pu être trouvé le nom de type ou espace de noms « ReportHelper » (sont vous manque une directive à l'aide ou une référence d'assemblage ?)

Toutes mes déclarations à l'aide sont là, je le références appropriées dans chaque projet pertinent, mais cela persiste encore. À ce stade, je suis totalement coincé, j'ai juste besoin de régler ce problème de référencement pour que toutes mes méthodes d'aide fonctionnent correctement.

Toute aide est grandement appréciée,

Pat.

+1

Probablement déjà fait mais assurez-vous de mettre à jour les références. –

Répondre

1

OK, j'ai trouvé le problème (en fait un collègue a)

Cette classe d'assistance d'origine était contenue dans le dossier App_Code de mon projet principal, qui, comme je viens d'apprendre, poignées de compilation différemment à tous les autres dossiers en un projet. Le code ici est compilé lors de l'exécution plutôt que pendant la construction. Lorsque j'ai créé mes nouvelles classes, elles se trouvaient dans le dossier app_code car j'utilisais le code rush pour extraire la classe dans un nouveau fichier, qui la conservait au même endroit ... après quoi je les déplaçais dans leur emplacement "sensible". Malheureusement, ils avaient toujours l'action de construction de "Contenu" hérité de leur présence précédente dans le dossier app_code. Donc, sur le nouveau fichier de classe, j'ai simplement changé son action de compilation en "Compiler" et maintenant tout va bien avec le monde.

Cheers,

Pat.

+0

Blimey - configuration impaire! Heureux que vous l'ayez fait fonctionner à la fin :-) – JLWarlow

+0

Vous devriez accepter votre réponse comme correcte, ainsi elle ne montre pas comme sans réponse. – Toothbrush

0

Votre ReportHelper est-il un projet ou une DLL distinct? Si oui avez-vous ajouté ce projet/dll comme référence? (Dans l'explorateur de solution sous Références, vérifiez votre projet/dll est là.

+0

Oui, ReportHelper se trouve dans un projet/DLL distinct. J'ai ma référence à l'autre projet & DLL ajouté dans le projet principal (essayé de référencer l'un, l'autre, et les deux!) Mais je n'ai toujours pas de chance. En outre, j'ai vu votre réponse précédente, où vous avez demandé si le projet référencé a été construit. Oui, il va construire pour moi, mais pour une raison quelconque, je ne peux toujours pas utiliser ma nouvelle classe. –

0

Avez-vous construit Company.Web.Application.Reporting afin que le type serait connu? Ce serait mon idée tout en veillant à ce que les dépendances sont mis en place correctement.

0

Il semble que vous sachiez ce que vous faites et que tout semble correct, donc il doit être quelque chose de simple.Essayez-vous d'accéder aux changements dans ReportHelper qui n'ont pas été compilés dans la DLL? Chaque fois que vous apportez des modifications à cet assemblage, vous devez le reconstruire

Vérifiez également que vous ajoutez le bon assemblage (par exemple, Debug vs. Release) à votre projet. . Peu importe le type, mais vous ne voulez pas compiler de nouvelles modifications dans la DLL Debug, et continuez d'ajouter l'ancienne version de la Release dll.