Проект C # / .NET - правильно ли я все настраиваю? - PullRequest
3 голосов
/ 22 апреля 2010

1-е решение находится : \ Common \ Controls \ Controls.sln
и его проект : \ Common \ Controls \ Common.Controls \ Common.Controls.csproj
Описание : Это библиотека, которая содержит этот класс:

public abstract class OurUserControl : UserControl
{
    // Variables and other getters/setters common to our UserControls
}

2-е решение находится : \ AControl \ AControl.sln
и его проект : \ AControl \ AControl \ AControl.csproj
Описание : Из множества форм / классов он будет содержать этот класс:

using Common.Controls;

namespace AControl
{
    public partial class AControl : OurUserControl
    {
        // The implementation
    }
}

Примечание о добавлении ссылок (не уверен, что это актуально):

Когда я добавляю ссылки (для проектов, которые я создаю), используя имена выше:
1. Я добавляю Common.Controls.csproj к AControl.sln
2. В AControl.sln я отключаю сборку Common.Controls.csproj
3. Я добавляю ссылку на Common.Controls (по проекту) в AControl.csproj .

Это (самый простой) способ, которым я знаю, как получить версии отладки, соответствующие ссылкам на отладку, и версии выпуска, соответствующие ссылкам на выпуск.

Теперь вот в чем проблема (третье решение / проект, который фактически использует UserControl):

3-е решение находится : \ MainProj \ MainProj.sln
и его проект : \ MainProj \ MainProj \ MainProj.csproj
Описание: Вот пример функции в одном из классов:

private void TestMethod<T>()
    where T : Common.Controls.OurUserControl, new()
{
    T TheObject = new T();
    TheObject.OneOfTheSetters = something;
    TheObject.AnotherOfTheSetters = something_else;

    // Do stuff with the object
}

Мы могли бы вызвать эту функцию так:

private void AnotherMethod()
{
    TestMethod<AControl.AControl>();
}

Это строит, запускает и работает. Нет проблем. Странно то, что после того, как я закрыл проект / решение и снова открыл его, у меня повсюду красные волнистые нервы. Я вывожу свой список ошибок и вижу множество ошибок (все, что связано с AControl, будет отмечено как ошибка).

Я увижу такие ошибки, как:

  • Тип «AControl.AControl» нельзя использовать в качестве параметра типа «T» в универсальном типе или методе «MainProj.MainClass.TestMethod ()». Не существует неявного преобразования ссылок из AControl.AControl в Common.Controls.OurUserControl.

или внутри самого метода (свойства, расположенные в абстрактном классе):

  • 'AControl.AControl' не содержит определения для 'OneOfTheSetters', и нет метода расширения 'OneOfTheSetters', принимающего первый аргумент типа 'AControl.AControl' (вы пропустили директиву using или ссылку на сборку? )

Между тем, я все еще могу собрать и запустить проект (тогда красные волнистые линии исчезнут, пока я не открою проект заново или не закрою / снова не открою файл). Мне кажется, что я могу неправильно настраивать проекты. Мысли?

1 Ответ

1 голос
/ 22 апреля 2010

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

Вы также можете создавать несколько решений с перекрывающимися вложенными проектами. Например. если вы часто редактируете только базовую библиотеку, создайте одно решение, которое содержит только ваш проект \ Common \ Controls \ Common.Controls \ Common.Controls.csproj, и создайте другое, содержащее все три, для редактирования двух других проектов.

Это даст вам лучший опыт работы с Visual Studio (и вам больше не нужно заботиться о соответствии отладки / выпуска и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...