2010-12-08 9 views
0

Ich habe eine Lösung mit mehreren Projekten, von denen die meisten Code oder Steuerelement-Bibliotheken sind. Ich habe eine Hauptfensterformularanwendung, die diese Bibliotheken referenziert und verwendet. Was ich versuche zu tun, ist eine zweite Windows-Anwendung zu erstellen, die die Hauptfenster erweitert, aber ich würde gerne in der Lage sein, sie als separate exe bereitzustellen.Referenz Windows Form Projekt Von einem anderen Windows Form Projekt in derselben Lösung

Wenn ich versuche, einen Verweis auf die neue App Verweis auf die Haupt-App hinzuzufügen; alles scheint in Ordnung, bis ich die neue App i mehrere Fehler msgs ähnlich erreichen unten versuchen zu laufen:

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

ich versucht habe Verweise auf alle DLL in den Fehlermeldungen und sie sind immer noch aufgelistet Hinzufügen, wenn ich versuche zu laufen die neue App Ich dachte an ein paar Workarounds, aber sie erfordern Benutzeränderungen, um separate Exe bei der Bereitstellung zu erhalten. Ich möchte das möglichst vermeiden. Irgendwelche Ideen?

Vielen Dank im Voraus, Jeff

Antwort

0

ok ich fand eine vernünftige Arbeit um. Grundsätzlich fügen Sie alle wiederverwendeten Formulare als vorhandene Elemente hinzu, klicken jedoch nicht einfach auf Hinzufügen, sondern auf den Dropdown-Pfeil und wählen Als Verknüpfung hinzufügen aus.

Es wäre großartig, Redesign wie JTew oben vorgeschlagen, aber das bringt mich dorthin, wo ich sein muss, ohne Code zu bewegen.

können Sie weitere Informationen finden here

Vielen Dank für Ihre Zeit, dies mit Blick auf und hoffentlich ist hilfreich, um mehr

Jeff Spo

0

Windows Forms-Anwendungen nicht der Punkt sein sollte, dass Sie die EXE-Dateien für den Start Ihres Prozesses wirklich nur eine Hülle sein (so viel wie möglich sowieso) verlängern, sollten. Diese Antwort beantwortet also nicht Ihr spezifisches Problem der Referenzexemplare, da dies nicht als gute Praxis angesehen wird.

Alle Erweiterungen sollten an Ihrem Code vorgenommen werden oder Bibliotheken über eine bekannte Schnittstelle oder einen bekannten Vertrag steuern. Im Allgemeinen werden zur Erweiterung von Anwendungen alternative oder zusätzliche DLLs verwendet, die zur Laufzeit geladen werden.

Angenommen, Sie haben eine Anwendung namens clock, die die Uhrzeit anzeigen soll.

Sie Ihre Anwendung mit einer Reihe von Verträgen (oder Schnittstellen) in einer referenzierbarer DLL „Clock.Contracts.dll“ strukturieren:

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

Sie dann jede Implementierung dieser in einem anderen DLL ("Clock .LocalComputer.dll“, "Clock.InternetTime.dll"

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

im UI/EXE Sie immer die Schnittstelle Referenz rufen Sie nicht die Umsetzung.

Wie bekommt man einen inst der implementierenden Klasse, wobei Reflection verwendet wird, um festzustellen, ob eine Klasse in einer DLL die Schnittstelle implementiert, und Activator.CreateInstance, um die Klasse zu generieren.

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

Es gibt Muster wie Inversion of Control und Dependency Injection, die diese Dinge in einer standardisierten Art und Weise in Ihre Anwendung adressieren helfen. Bibliotheken von Drittanbietern wie Castle Windsor, Spring können helfen. Eine Google-Suche auf diesen gibt Ihnen etwas Lesematerial.

Ich werde sagen, dass es eine Weile dauern kann, um sich mit diesen Dingen herumzuschlagen.

+0

Ich stimme aber die ursprüngliche exe ist einige 30k Zeilen Code und Es ist zu viel Risiko, den ganzen Code an dieser Stelle herum zu bewegen. Also muss ich eine Arbeit mit der Struktur herausfinden, wie sie ist. Ich werde jedoch Ihren Lesevorschlag verwenden. Danke für deinen Beitrag. – iamspo