2010-12-08 2 views
0

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

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

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 в сообщениях об ошибках, и они все еще в списке, когда я пытаюсь запустить новое приложение. Я подумал о нескольких работах, но они требуют изменений для пользователей, чтобы поддерживать отдельный exe при развертывании. Я хотел бы избежать этого, если это возможно. Есть идеи?

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

ответ

0

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

Было бы здорово перепроектировать, как предложил JTew, но это дает мне то, что мне нужно, чтобы не перемещать код.

Более подробную информацию Вы можете найти here

Спасибо за все свое время, глядя над этим и, надеюсь, полезно более

Джефф Spo

0

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

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

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

Вы можете структурировать приложение с набором контрактов (или интерфейсы) в Referenceable 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; } 
} 

В UI/EXE вы всегда ссылаться на интерфейс не вызываете реализацию.

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

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

Есть модели, как инверсии управления и Dependency Injection, которые помогают решить эти вещи в стандартизированной форме в приложении. Сторонние библиотеки, такие как Castle Windsor, Spring могут помочь. Поиск в Google по ним даст вам некоторые материалы для чтения.

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

+0

я согласен, но оригинальный ехе есть некоторые 30k строк кода и в этот момент слишком много рисков перемещает весь этот код. Поэтому мне нужно выяснить, как работать со структурой, как есть. Однако я буду использовать ваше предложение для чтения. Спасибо за ваш вклад. – iamspo 2010-12-09 19:32:14