Ссылка на проект Windows Form из другого проекта Windows Form в том же решении - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть решение с несколькими проектами, большинство из которых являются библиотеками кода или управления.У меня есть главное приложение форм Windows, которое ссылается и использует эти библиотеки.То, что я пытаюсь сделать, это создать 2-е приложение Windows, которое расширяет основное, но я хотел бы иметь возможность развертывать их как отдельные исполняемые файлы.

Когда я пытаюсь добавить ссылку на новое приложение, ссылающееся наосновное приложение;все кажется хорошо, пока я не пытаюсь запустить новое приложение, я получаю несколько сообщений об ошибках, подобных приведенным ниже:

Error   1   Could not find file 'ADODB.dll' referenced by assembly 'D:\Visual Studio 2005\Projects\X\XX\bin\Debug\XXX.exe.manifest'.    <newAppName>

Я попытался добавить ссылки на все DLL в сообщениях об ошибках, и они все еще перечислены, когда я пытаюсьзапустить новое приложение.Я подумал о нескольких обходных путях, но они требуют изменений пользователя для поддержки отдельных исполняемых файлов при развертывании.Я хотел бы избежать этого, если это возможно.Есть идеи?

Заранее спасибо, Джефф

Ответы [ 2 ]

0 голосов
/ 11 декабря 2010

хорошо, я нашел разумное решение. По сути, вы добавляете все повторно используемые формы в качестве существующих элементов, но вместо того, чтобы просто щелкнуть «Добавить», щелкните стрелку раскрывающегося списка и выберите «Добавить как ссылку».

Было бы здорово перепроектировать, как JTew предложил выше, но это поможет мне, где я должен быть без необходимости перемещать код.

Вы можете найти больше информации здесь

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

Джефф Спо

0 голосов
/ 09 декабря 2010

Ваши приложения Windows Form не должны быть точкой, которую вы расширяете, exe-файлы должны быть просто оболочкой для запуска вашего процесса (насколько это возможно). Таким образом, этот ответ не отвечает вашей конкретной проблеме ссылок, поскольку это не считается хорошей практикой.

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

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

Вы можете структурировать свое приложение с помощью набора контрактов (или интерфейсов) в ссылочной библиотеке DLL «Clock.Contracts.dll»:

public interface ITimeService
{
public string Name { get; }
public Date GetTime();
}

Затем у вас есть каждая реализация этого в другой DLL («Clock.LocalComputer.dll», «Clock.InternetTime.dll»

public class LocalTime : ITimeService
{
public string Name
{ get { return "Local Time"; }}
public Date GetTime()
{ return Date.Now; }
}

В пользовательском интерфейсе / EXE вы всегда ссылаетесь на интерфейс, а не вызываете реализацию.

Как получить экземпляр реализующего класса, используя Reflection, чтобы определить, реализует ли класс в DLL интерфейс, и Activator.CreateInstance, чтобы сгенерировать класс.

http://gsraj.tripod.com/dotnet/reflection.html

Существуют такие шаблоны, как Inversion of Control и Dependency Injection, которые помогают решать эти проблемы стандартизированным способом в вашем приложении. Сторонние библиотеки, такие как Замок Виндзор, Spring могут помочь. Поиск в Google даст вам некоторые материалы для чтения.

Я скажу, что может потребоваться некоторое время, чтобы полностью разобраться в этих вещах.

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