我有几个项目的解决方案,其中大部分是代码或控制库。我有一个主窗口表单应用程序,它引用并使用这些库。我想要做的是创建一个扩展主要应用程序的第二个Windows应用程序,但我希望能够将它们作为单独的exe进行部署。
当我尝试添加引用主应用程序的新应用程序的引用时;一切似乎都很好,直到我尝试运行新的应用程序我得到几个类似于下面的错误消息:
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 :(得分:0)
你的Windows窗体应用程序不应该是你扩展的点,exe文件应该只是一个用于启动你的进程的shell(尽可能多的)。所以这个回答并没有回答你参考exes的具体问题,因为这不是一个好的做法。
所有扩展都应该通过已知的接口或合同对您的代码或控件库进行。通常,扩展此类应用程序的过程是使用在运行时加载的备用或附加DLL。
假设您有一个名为clock的应用程序来显示时间。
您可以使用可引用的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
有一些模式,如控制反转和依赖注入,它们有助于在应用程序中以标准化方式解决这些问题。第三方图书馆如Castle Windsor,Spring可以提供帮助。谷歌搜索这些将给你一些阅读材料。
我会说完全了解这些事情可能需要一段时间。
答案 1 :(得分:0)
按照JTew上面的建议进行重新设计会很棒,但是这让我无需移动代码即可。
您可以找到更多信息here
感谢您花时间查看此内容,希望对更多内容有所帮助
Jeff Spo