从同一解决方案中的另一个Windows窗体项目引用Windows窗体项目

问题描述:

我有几个项目的解决方案,其中大部分是代码或控制库。我有一个主要的Windows窗体应用程序引用和使用这些库。我想要做的是创建一个扩展主要的第二个Windows应用程序,但我希望能够将它们部署为单独的exe。从同一解决方案中的另一个Windows窗体项目引用Windows窗体项目

当我尝试添加对引用主应用程序的新应用程序的引用时;一切似乎都很正常,直到我尝试运行新的应用程序,我得到一些错误的MSG类似如下:

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。如果可能,我想避免这种情况。有任何想法吗?

由于提前,杰夫

好的,我发现了一个合理的工作。基本上,您将所有重用的表单添加为现有项目,但不是单击添加,而是单击下拉箭头并选择添加为链接。

这将是很好的重新设计为JTew上面提出的建议,但这让我不需要移动代码的地方。

你可以找到更多信息here

感谢您的时间来寻找这种过度,希望有助于更

杰夫·斯波

Windows窗体应用程序不应该是您扩展,的exe文件应该真的只是成为发起的进程壳(尽可能反正)点。所以这个回应没有回答你的具体参考问题,因为这不是好的做法。

所有的扩展应该在您的代码或控制库中的一个已知的接口或合同。通常,像这样扩展应用程序的过程是使用在运行时加载的备用或附加DLL。

假设你有一个叫做clock的应用程序来显示时间。

你可以用一组可引用DLL“Clock.Contracts.dll”合同(或接口)的构建应用程序:

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

然后,您对此有每个实现在另一个DLL(“时钟.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

有喜欢控制和依赖注入的反转模式,帮助在应用程序中的一个标准化的方式来解决这些事情。像温莎城堡,春季等第三方图书馆可以提供帮助。谷歌搜索这些会给你一些阅读材料。

我会说,它可能需要一段时间才能完全掌握这些东西。

+0

我同意,但原来的exe是一些代码30K线和在这一点上移动所有代码的风险太大。所以我需要弄清楚结构是如何工作的。尽管如此,我仍然会使用你的阅读建议。感谢您的输入。 – iamspo 2010-12-09 19:32:14