2009-05-23 14 views
5

Poco fa ho scritto un piccolo programma in Microsoft Visual C# 2008 Express Edition. Includeva un file chiamato "ProblemReport.cs" con la sua stessa forma e la classe ProblemReport.Come si aggiunge un file cs a un progetto C# esistente?

Sto scrivendo un nuovo programma e voglio riutilizzare questo codice. (ancora funzionante in MS Vis C# 2008 express)

Nel mio nuovo programma, in C# Solution Explorer, ho fatto clic con il tasto destro sul mio progetto e ho scelto "Aggiungi elemento esistente ..." Ho quindi aggiunto ProblemReport.cs, ProblemReport. designer.cs e ProblemReport.resx.

Che passaggio (i) mi mancano qui? Quando torno al modulo principale nel mio nuovo programma e provo a creare un'istanza di "ProblemReport", ricevo il messaggio di errore:

"Impossibile trovare il tipo di nome spazio dei nomi 'ProblemReport' (sono ti manca una direttiva using o un riferimento all'assembly?) "

Ovviamente, dovrei fare qualcos'altro per far funzionare tutto questo ... ma non sono sicuro di cosa sia!

-Adeena

risposta

9

Assicurarsi che tutti i file CS sono all'interno dello stesso spazio dei nomi. Sembra che quelli importati non stiano vivendo con il tuo nuovo progetto.

Assicurarsi che:

namespace MyProgram //same as the rest of your project 
{ 

    public class ProblemReport 
    { 
    } 

} 

nel frattempo in altri file Cs ....

namespace MyProgram 
{ 

    public class SomeClass 
    { 
      public void DoSomething() 
      { 
       ProblemReport. //you should get intellisense here. 
      } 
     } 

} 
+0

E 'stato ... grazie! :) – adeena

+0

Penso che questa risposta abbia bisogno di maggiori informazioni. La risposta attuale suggerisce che tutto deve essere nello stesso spazio dei nomi. In tal caso, non è possibile riutilizzare un file in un altro programma. –

1

quando è stato creato è probabile ha usato uno spazio dei nomi diverso, come quelli sono generati dal nome del progetto per impostazione predefinita.

Nel file .CS lo spazio dei nomi corrisponde a quello del resto del progetto?

2

si deve aggiungere una direttiva "utilizzando" al tuo nuovo progetto -

using ProblemReport; 

allora si dovrebbe essere in grado di accedere alla classe ProblemReport. Ovviamente ciò dipende dal nome dello spazio dei nomi del file ProblemReport.cs.

+0

+1; Ho provato a ricreare lo scenario e ho ricevuto lo stesso messaggio di adeena. Aggiunta di un'istruzione using con lo spazio dei nomi per il modulo importato ha risolto il problema. –

4

Potrebbe essere meglio estrarre ProblemReport nella propria libreria di classi (dll separata) in modo da avere solo una copia del codice.

Creare un nuovo progetto di libreria di classi, copiare ProblemReport.cs, ProblemReport.designer.cs e ProblemReport.resx e aggiornare lo spazio dei nomi come richiesto. Costruisci e metti la dll da qualche parte al centro. Quindi aggiungi un riferimento a questa libreria di classi dai tuoi due programmi.

+0

sì - hai ragione che questo è quello che dovrei fare ... e potrei ... il problema dello spazio dei nomi l'ha risolto per ora. L'unica ragione per cui non lo farei è che il modulo usato in entrambi i miei programmi sarà leggermente diverso. – adeena

+0

Bene, si potrebbe basare la classe nel codice comune e nella sottoclasse nei programmi ... – ChrisF

Problemi correlati