2011-01-22 53 views
8

我在Visual Studio 2010中有一個C#控制檯應用程序。它有一個Main()方法以及一堆實用程序類。我希望這些實用程序類可用於其他解決方案。從在線閱讀看來,我需要將它編譯爲類庫(DLL)。因此,這裏是我所做的:如何將C#代碼編譯爲庫而不是可執行文件?

  • 走到在Visual Studio中的「項目> [項目]屬性>應用程序」,並從「控制檯應用程序」到「類庫」
  • 重建改爲「輸出型」; ProjectName.dll是在bin/Debug中創建的。
  • 創建新的控制檯應用程序
  • 解決方案資源管理器>添加引用>瀏覽到ProjectName.DLL,選擇它。

但是,智能感知和對象瀏覽器都不能找到該DLL內部的類。

我嘗試重新編譯幾個不同的控制檯應用程序作爲類庫,並得到相同的結果。我還注意到,如果我最初將解決方案創建爲類庫,那麼它會起作用,但如果稍後將其轉換爲其他類型,則不適用。

任何提示?

+0

我假設你知道的類在類庫中的命名空間?如果你不添加'使用命名空間';在新的控制檯應用程序代碼中,則需要完全限定對該類的命名空間引用。 – tawman 2011-01-22 22:38:52

+1

在你的班級圖書館裏,確保你的班級也被標記爲公開。 – tawman 2011-01-22 22:39:13

回答

5

你不需要將它構建爲一個dll。 VS 2010(和IIRC 2008)允許引用exe程序集。所有你需要的是他們相關的類型被宣佈爲public - 如果你沒有添加說明符,頂級類別將被忽略爲internal

0

確保您的dll項目中的類是公共的。

1

我總是這樣做的(因爲這是你用C++靜態庫所做的,這是我通常使用的 - 雖然我認爲它對C#也有一些優點)是將類庫的項目添加到解決方案中,然後在使用它的項目(或項目)中添加對其的引用。 當你去添加一個引用時,潛在引用的列表包含了解決方案中的項目,所以它應該是相當明顯的。然後,您應該爲您的圖書館獲得智能感知。

這樣做的一個好處是,如果您需要編輯庫項目中的文件,它非常直接,因爲它們非常接近,然後在編譯解決方案時自動重建項目。

0

首先,從託管庫的角度來看,託管庫的輸出類型無關緊要。我的意思是你可以成功地從ConsoleApplication2.exe項目中引用ConsoleApplication1.exe(所以你沒有理由將ConsoleApplication1.exe轉換爲ConsoleApplication1.dll)。

第二,我試圖重現你的情況,但是......沒有效果。我的VS顯示來自ConsoleApplication1.dll的類型/方法。我可以假設的一個原因是您忘記爲您的實用程序類設置visibility visibility(public關鍵字)。

1

您可以在項目屬性切換輸出類型類庫以及 - 那麼你將有一個輸出DLL,而不是exe文件

相關問題