2010-12-08 42 views
0

J'ai une solution avec plusieurs projets dont la plupart sont des bibliothèques de code ou de contrôle. J'ai une application principale de formes de fenêtres qui référence et utilise ces bibliothèques. Ce que j'essaye de faire est de créer une deuxième application de Windows qui prolonge la principale, mais j'aimerais pouvoir les déployer comme des exe séparés. Lorsque j'essaie d'ajouter une référence à la nouvelle application référençant l'application principale; tout semble bien jusqu'à ce que je tente de lancer la nouvelle application que je reçois plusieurs msgs d'erreur semblable à ci-dessous:Référence Projet Windows Form d'un autre projet Windows Form dans la même solution

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

i ont essayé d'ajouter des références à tous les dll dans les messages d'erreur et ils sont toujours sur la liste lorsque je tente d'exécuter la nouvelle application. J'ai pensé à quelques solutions, mais elles nécessitent des changements d'utilisateur pour maintenir des exe séparés lors du déploiement. Je voudrais éviter cela si possible. Des idées?

Merci à l'avance, Jeff

Répondre

0

ok j'ai trouvé un travail raisonnable. Fondamentalement, vous ajoutez tous les formulaires réutilisés en tant qu'éléments existants, mais au lieu de simplement cliquer sur ajouter, cliquez sur la flèche déroulante et choisissez Ajouter en tant que lien.

Ce serait génial de le redessiner comme JTew suggéré ci-dessus mais cela m'amène où je dois être sans avoir à déplacer le code.

Vous pouvez trouver plus d'informations here

Merci pour tout votre temps à regarder encore et est, espérons utile à plus

Jeff Spo

0

Vos applications Windows Forms ne doivent pas être le point que vous étendez, les fichiers exe doit être vraiment juste une coquille pour le lancement de votre processus (autant que possible de toute façon). Donc, cette réponse ne répond pas à votre problème spécifique de référence exes car cela n'est pas considéré comme une bonne pratique.

Toutes les extensions doivent être apportées à votre bibliothèque de code ou de contrôle à partir d'une interface ou d'un contrat connu. Généralement, le processus d'extension d'applications de ce type consiste à utiliser des DLL alternatives ou supplémentaires qui sont chargées lors de l'exécution.

Dites que vous avez une application appelée horloge qui doit afficher l'heure.

Vous pouvez structurer votre application avec un ensemble de contrats (ou interfaces) dans une DLL référençables « Clock.Contracts.dll »:

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

Vous avez alors chaque implémentation de cette DLL dans un autre ("Horloge .LocalComputer.dll », "Clock.InternetTime.dll"

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

Dans l'interface utilisateur/EXE vous faites référence à l'interface toujours ne pas appeler la mise en œuvre.

Comment obtenez-vous un inst Utilisation de Reflection pour identifier si une classe dans une DLL implémente l'interface et Activator.CreateInstance pour générer la classe.

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

Il existe des modèles tels que l'inversion de contrôle et injection de dépendances qui aident à répondre à ces choses d'une manière standardisée dans votre application. Des bibliothèques tierces comme Castle Windsor, Spring peuvent vous aider. Une recherche google sur ceux-ci vous donnera du matériel de lecture.

Je dirais que cela peut prendre un certain temps avant que vous ne compreniez complètement ces choses.

+0

Je suis d'accord, mais l'exe d'origine est quelques 30k lignes de code et il y a trop de risques à déplacer tout ce code à ce stade. J'ai donc besoin de trouver un travail autour de la structure telle qu'elle est. Je vais utiliser votre suggestion de lecture. Merci pour votre contribution. – iamspo