2010-02-21 118 views
20

Agregué un proyecto, Project2, a mi solución. Ya tenía otro proyecto, digamos Proyecto 1. ¿Cómo puedo llamar a clases y métodos desde project2 a project1?¿Cómo puedo hacer referencia a un proyecto de otro en C#?

Lo que hice:

que tienen Proyecto 1 y su solución. Agregué el Proyecto 2 a la solución del Proyecto 1. El Proyecto 1 y el Proyecto 2 tienen un espacio de nombres llamado Corrección. Ahora, llamé usando Corrección. Sin embargo, en Project 1 tipear Project2 me da un error ya que afirma que no sabe de qué se trata.

También agregué el proyecto 2 como referencia.

gracias por todas las respuestas. No sé lo que estoy haciendo mal

+0

Ya he agregado la referencia al proyecto. No sé cómo llamarlo –

+0

Ver mi respuesta actualizada. – James

+0

@C .: ¿qué has intentado? –

Respuesta

41

Primero, necesita agregar una referencia a Project2 en Project1.

Si va al Proyecto1 -> Referencias -> Agregar referencia, debería ver una opción para agregar proyectos en las soluciones y agregar project2.

Una vez que se agrega una referencia, para llamar a una clase Foo en el espacio de nombres Name1.Name2, puede utilizar la clase como

Name1.Name2.Foo foo = new Name1.Name2.Foo(...); 

o si le gustaría evitar tener que escribir, se podría añadir la instrucción using cerca la parte superior del archivo

using Name1.Name2; 

y ahora puede hacer referencia a la clase utilizando simplemente Foo, como

Foo foo = new Foo(...); 

Tenga en cuenta que tendrá para descubrir los espacios de nombres en Project2. Solo usar el nombre Project2 no funcionará. Mire el archivo que contiene la declaración de la clase que desea usar y busque la definición del espacio de nombre.

así que si ves algo tan

namespace Name1.Name2 { 


    class Bar { 
     // Blah 
    } 

    // Notice the word public here. 
    public class Foo { 
     // Blah 
    } 
} 

Name1.Name2 es el espacio de nombres para Foo y eso es lo que hay que utilizar.

También tenga en cuenta que es probable que necesite tener el modificador de acceso público para la clase que desea utilizar en Proyecto1. Por ejemplo, en el escenario anterior, debería poder acceder a la clase Foo, pero no a la clase Bar.

Esta página le ayudará a entender los espacios de nombres: http://www.csharp-station.com/tutorials/lesson06.aspx

+0

Sí, lo he hecho, gracias :) ¿Pero cómo lo llamo? –

+0

@C., ¿Qué quieres decir con cómo lo "llamas"? Una vez que lo referencia, ahora tiene acceso a las clases y métodos de espacios de nombres. Haz con ellos lo que quieras. – Mithrax

+0

@C: He editado la respuesta para proporcionar más información, leerla y ver si me ayuda. –

0

es necesario agregar Project2 a las referencias de la Proyecto1. Ahora puedes acceder a las clases desde Project2. ¡No olvides agregar el espacio de nombres correcto!

+0

no encuentra el espacio de nombres correcto:/ –

2

Solo necesita agregar una referencia en Project1 al Proyecto 2. Para ello, haga clic con el botón derecho en la carpeta References desde el panel del explorador de soluciones y luego puede usar la opción Browse para encontrar Project2. O si ya está agregado a la solución, puede usar la pestaña Projects.

Solo para aclarar esto para usted. Agregar un proyecto al Solution es no lo mismo que agregar una referencia. Abra Project2 en Visual Studio.A continuación, agregue Project1 a la solución o haga clic con el botón derecho en la carpeta References en Project2 y agregue una referencia a Project1. Para asegurarse de haber agregado correctamente una referencia, expanda la carpeta de referencias y verifique que pueda ver Project1 en la lista.

Ejemplo

Crear una nueva aplicación de consola y lo llaman MyApplication. A continuación, haga clic con el botón derecho en Solution y seleccione la opción Add New Project y cree un nuevo proyecto de biblioteca y llámelo MyLib. En este punto, simplemente ha agregado 2 proyectos a la solución 1, no se han creado referencias entre cada proyecto.

haga clic derecho en la carpeta References el marco del proyecto MyApplication y seleccione Add Reference.... Como MyLib ya es parte de la solución, puede ir a la pestaña Projects y seleccionar MyLib de la lista que crea una nueva referencia a este proyecto en MyApplication. Si no es parte de la solución, puede usar la pestaña Browse y encontrar el proyecto a través del explorador.

Por lo tanto, en este punto hemos establecido una referencia dentro de MyApplication a MyLib. Entonces, para usar las clases de MyLib dentro de MyApplication podemos declarar un uso para el proyecto dentro de la unidad o podemos usar la ruta completa directamente, p.

// main code file in MyApplication 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using MyLib; // This will allow me to access the classes inside MyLib directly 

namespace PdfPrinter 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // if we have declared the namespace at the top, we can do: 
      MyLibClass cls = new MyLibClass(); 
      // or if you don't want to add the namespace at the top we have to do: 
      MyLib.MyLibClass cls = new MyLib.MyLibClass(); 
     } 
    } 
} 

Hope that lo aclara un poco para ti.

+0

Agregué el proyecto usando ADD EXISTING PROJECT para la solución ... pero no me deja llamarlo:/ –

+0

Usted solo ha agregado el proyecto a la 'solución' esto no es el lo mismo que agregar una 'referencia' de un proyecto a otro. Como mencioné anteriormente, debe hacer clic con el botón derecho en la carpeta 'references' dentro de Project2 y agregar una referencia a Project1. – James

1

Seleccione el proyecto que va a utilizar (project1 por ejemplo), haga clic con el botón derecho en el explorador de soluciones y haga clic en "Agregar referencia".

A partir de allí, podrá agregar una referencia a la otra solución (proyecto2).

Todo lo que tienes que hacer entonces es agregar una declaración using en tu proyecto principal (project1) y podrás acceder a ella normalmente.

+0

no me deja usar la declaración de project2:/ –

+0

Tienes que crear un objeto, ver la respuesta de bakasans mientras lo explica con más claridad que nunca =] –

3

Debe especificar la "ruta" al código que está tratando de llamar. Para ello, realice

1) Especifique el espacio de nombres del segundo proyecto/clase que desea utilizar, normalmente en la parte superior del archivo de código.

using MySecondProject; 

var foo = new ClassFromSecondProject(); 

2) La especificación expresa el nombre de la clase que desea utilizar, incluyendo su espacio de nombres

//do stuff 
var foo = new MySecondProject.ClassFromSecondProject(); 
//do more stuff 
2

acabo de tener este mismo problema. Comprobé tres veces todo, y se agregaron referencias, el proyecto estaba en la misma solución, todo listo. También conozco mis espacios de nombres, incluso obtuve el código pero cuando construyo, obtuve el mismo error que el espacio de nombres no se puede encontrar.

Me tomó una hora darme cuenta de esto: el proyecto que agregué, que no encontró el espacio de nombres respectivo, se estableció en un marco de destino de .NET diferente. Cambié mi solución al .NET Framework 4 "completo" en lugar de a Client Profile 4, pero el nuevo proyecto que agregué se estableció nuevamente en el perfil del cliente.

En lugar de darme una advertencia adecuada acerca de la mala configuración, afirmaba que los espacios de nombres no se podían encontrar.

Espero que esto ayude a alguien y le ahorre el tiempo que acabo de perder.

+0

¡Gracias por la sugerencia! – Tatarinho

0

Según lo expresado por otros, debe agregar los proyectos (existentes) a la solución. Luego debe agregar una referencia a ellos en Solución -> Proyectos. Ahora deberían aparecer con sus espacios de nombres en el Buscador de objetos.

Hay una cosa más que necesita asegurarse, que me llevó un poco de experimentación para averiguarlo. Cada vez que agregué mi segundo proyecto, el primero dejó de funcionar y el mensaje de error fue el mismo que cuando el proyecto omite una referencia ("No se pudo encontrar el tipo o el nombre del espacio de nombres 'Ber' (¿falta una directiva de uso o una referencia de ensamblaje?) "). El problema era que ambos proyectos tenían el mismo valor predeterminado Nombre del ensamblado ("Biblioteca de clases") en el proyecto Propiedades -> Aplicación. Así que dales nombres únicos. Yo uso el mismo que el Nombre de espacio predeterminado.

0

Tuve el mismo problema con este error. No pude detectar project1 desde project2. Agregué una referencia de project2 a project1 pero aún no funcionaba. Luego descargué project1, lo eliminé de la solución. Luego lo agregué de nuevo, hice referencia de project2 y ta da ... funcionó ..... :-)

1

No tengo suficientes representantes para respaldar la respuesta de Tom, pero me ayudó mucho. Además, debe seleccionar misma subversión de .NET Framework (además de ser el mismo full/core/standard, etc.). Tenía 4,5 especificados en un proyecto de prueba y obtuve este error, cambiándolo a 4.6.1 (al igual que los demás) corrige este problema.

Cuestiones relacionadas