从同一解决方案中的另一个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
有喜欢控制和依赖注入的反转模式,帮助在应用程序中的一个标准化的方式来解决这些事情。像温莎城堡,春季等第三方图书馆可以提供帮助。谷歌搜索这些会给你一些阅读材料。
我会说,它可能需要一段时间才能完全掌握这些东西。
我同意,但原来的exe是一些代码30K线和在这一点上移动所有代码的风险太大。所以我需要弄清楚结构是如何工作的。尽管如此,我仍然会使用你的阅读建议。感谢您的输入。 – iamspo 2010-12-09 19:32:14