2010-12-08 101 views
0

我有幾個項目的解決方案,其中大部分是代碼或控制庫。我有一個主要的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。如果可能,我想避免這種情況。有任何想法嗎?

由於提前,傑夫

回答

0

好的,我發現了一個合理的工作。基本上,您將所有重用的表單添加爲現有項目,但不是單擊添加,而是單擊下拉箭頭並選擇添加爲鏈接。

這將是很好的重新設計爲JTew上面提出的建議,但這讓我不需要移動代碼的地方。

你可以找到更多信息here

感謝您的時間來尋找這種過度,希望有助於更

傑夫·斯波

0

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

相關問題