Как я могу сослаться на проект из другого в C #? - PullRequest
26 голосов
/ 21 февраля 2010

Я добавил проект Project2 в свое решение. У него уже был другой проект, скажем, Project 1. Как я могу вызвать классы и методы из project2 в project1?

Что я сделал:

У меня есть Проект 1 и его решение. Я добавил Проект 2 в решение Проекта 1. Проект 1 и проект 2 имеют пространство имен с именем Коррекция. Теперь я позвонил с помощью Correction. Однако в Project 1 ввод Project2 выдает ошибку, поскольку он утверждает, что не знает, что это такое.

Я также добавил проект 2 в качестве ссылки.

спасибо за все ответы. я не знаю, что я делаю неправильно

Ответы [ 9 ]

47 голосов
/ 21 февраля 2010

Во-первых, вам нужно добавить ссылку на Project2 в Project1.

Если вы зайдете в Project1 -> References -> Add Reference, вы должны увидеть опцию добавления проектов в решения и добавления project2.

После добавления ссылки для вызова класса Foo в пространстве имен Name1.Name2 вы можете использовать этот класс как

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

или, если вы хотите избежать ввода, вы можете добавить оператор using в верхнюю часть файла

using Name1.Name2;

и теперь может ссылаться на класс, используя просто Foo, например

Foo foo = new Foo(...);

Обратите внимание, у вас будет выяснить пространства имен в Project2. Простое использование имени Project2 не сработает. Посмотрите на файл, который содержит объявление класса, который вы хотите использовать, и найдите определение пространства имен.

Так что, если вы видите что-то как

namespace Name1.Name2 {


    class Bar {
        // Blah
    }

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

Name1.Name2 - это пространство имен для Foo, и это то, что вам нужно использовать.

Также обратите внимание, что вам, вероятно, понадобится public модификатор доступа для класса, который вы хотите использовать в Project1. Например, в приведенном выше сценарии вы должны иметь доступ к классу Foo, но не к классу Bar.

Эта страница поможет вам понять пространства имен: http://www.csharp -station.com / tutorials / lesson06.aspx

3 голосов
/ 21 февраля 2010

Вы должны указать «путь» к коду, который вы пытаетесь вызвать. Вы достигаете этого либо

1) Укажите пространство имен второго проекта / класса, который вы хотите использовать, как правило, в верхней части файла кода.

using MySecondProject;

var foo = new ClassFromSecondProject();

2) Явное указание имени класса, который вы хотите использовать, включая его пространство имен

//do stuff
var foo = new MySecondProject.ClassFromSecondProject();
//do more stuff
2 голосов
/ 08 мая 2013

У меня была такая же проблема. Я трижды проверил все, и ссылки были добавлены, проект был в том же решении, все установлено. Я также знаю свои пространства имен, я даже получил код завершения, но при сборке я получил ту же ошибку, что пространство имен не может быть найдено.

Мне потребовался один час, чтобы выяснить это: проект, который я добавил, который не нашел соответствующего пространства имен, был настроен на другую целевую среду .NET. Я изменил свое решение на «полный» .NET Framework 4 вместо Client Profile 4, но новый проект, который я добавил, снова был установлен в Client Profile.

Вместо того чтобы предупреждать меня о неправильной конфигурации, он утверждал, что пространства имен не могут быть найдены.

Надеюсь, это кому-нибудь поможет и сэкономит вам время, которое я потратил впустую.

2 голосов
/ 21 февраля 2010

Вам просто нужно добавить ссылку в Project1 в Project 2. Это можно сделать, щелкнув правой кнопкой мыши папку References на панели обозревателя решений, после чего вы можете использовать опцию Browse для поиска Project2. Или, если он уже добавлен в решение, вы можете просто использовать вкладку Projects.

Просто чтобы прояснить это для вас. Добавление проекта к Solution - это , а не - это то же самое, что добавление ссылки. Откройте Project2 в Visual Studio. Затем либо добавьте Project1 в решение, либо щелкните правой кнопкой мыши папку References в Project2 и добавьте ссылку на Project1. Чтобы убедиться, что вы правильно добавили ссылку, разверните папку ссылок и убедитесь, что вы видите Project1 в списке.

Пример

Создайте новое консольное приложение и назовите его MyApplication. Затем щелкните правой кнопкой мыши Solution и выберите параметр Add New Project, создайте новый проект библиотеки и назовите его MyLib. На данный момент вы просто добавили 2 проекта к 1 решению, ссылки между каждым проектом не были созданы.

Щелкните правой кнопкой мыши папку References в проекте MyApplication и выберите Add Reference.... Поскольку MyLib уже является частью решения, вы можете перейти на вкладку Projects и выбрать MyLib из списка, который создает новую ссылку на этот проект в MyApplication. Если это не часть решения, вы можете воспользоваться вкладкой Browse и найти проект через проводник.

Итак, на данный момент мы установили ссылку внутри MyApplication на MyLib. Таким образом, чтобы использовать классы из MyLib внутри MyApplication, мы можем либо объявить использование для проекта внутри модуля, либо напрямую использовать полный путь, например,

// 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();
        }
    }
}

Надеюсь, это немного прояснит для вас.

1 голос
/ 06 марта 2018

Мне не хватает представителя, чтобы поднять голос Тома, но он мне очень помог. Кроме того, вы должны выбрать ту же самую подрывную версию .NET Framework (кроме того, это тот же полный / основной / стандартный и т. Д.). Я указал 4.5 в тестовом проекте и получил эту ошибку, меняя ее на 4.6.1 (так же, как и другие), исправляет эту проблему.

1 голос
/ 21 февраля 2010

Выберите проект, который вы будете использовать (например, project1), щелкните его правой кнопкой мыши в обозревателе решений и нажмите «Добавить ссылку».

Оттуда вы сможете добавить ссылку на другое решение (проект2).

Все, что вам нужно сделать, это добавить оператор использования в ваш основной проект (проект1), и вы сможете получить к нему обычный доступ.

0 голосов
/ 27 октября 2014

У меня была такая же проблема с этой ошибкой. Я не смог обнаружить project1 из project2. Я добавил ссылку из проекта 2 в проект 1, но она все еще не работала. Затем я выгрузил project1, удалил его из решения. Затем я добавил его снова, сделал ссылку из проекта 2 и та да ... он работал .....: -)

0 голосов
/ 03 октября 2014

Как заявили другие, вам необходимо добавить (существующие) проекты в решение. Затем вам нужно добавить ссылку на них в Решение -> Проекты . Теперь они должны отображаться со своими пространствами имен в Обозревателе объектов .

Есть еще одна вещь, в которой вы должны убедиться, что мне потребовались некоторые эксперименты, чтобы выяснить это. Всякий раз, когда я добавлял свой второй проект, первый перестал работать, и сообщение об ошибке было таким же, как когда проект пропускает ссылку ( "Не удалось найти тип или имя пространства имен 'Ber' (вы пропускаете использование директива или ссылка на сборку?) "). Проблема заключалась в том, что оба проекта имели одинаковое значение по умолчанию Имя сборки ("Библиотека классов") в проекте Свойства -> Приложение . Так дайте им уникальные имена. Я использую так же, как Пространство имен по умолчанию .

0 голосов
/ 21 февраля 2010

Вам необходимо добавить Project2 к ссылкам Project1. Теперь вы можете получить доступ к классам из Project2. Не забудьте добавить правильное пространство имен!

...