2012-02-01 82 views
1

我有一個文件名爲common.cs包含這樣如何在其他asp.net項目中使用C#編寫的DLL?

public int GetColumnIndexByNameTemplateField(GridViewRow row, string SearchColumnName) 
{ 
    int columnIndex = 0; 
    foreach (DataControlFieldCell cell in row.Cells) 
    { 
     if (cell.ContainingField is TemplateField) 
     { 
      if (((TemplateField)cell.ContainingField).HeaderText.Equals(SearchColumnName)) 
      { 
       break; 
      } 
     } 
     columnIndex++; 
    } 
    return columnIndex; 
} 

常用的功能現在我想做出common.cs文件更改爲common.dll,我創建了我複製另一個類庫項目所有來自common.cs文件的代碼,添加了必要的引用並將其構建爲生成dll文件,現在我將該dll文件從項目調試目錄粘貼到已使用common.cs的asp.net項目的bin目錄中,但每當我嘗試使用導入該dll。

[DllImport("common.dll")] 
public static extern String NewString(String x); 

其中NewString是另一個函數,我得到這個錯誤。

無法找到名爲「NewString」在DLL「common.dll」的切入點。

我已經檢查已經發布的問題,以及其他互聯網上的指南,告訴如何使用DLL,但我不知道爲什麼我得到這個錯誤也大多數的指南顯示DLL寫在C++因爲我的dll是用C#編寫的,他們還告訴使用__declspec(dllexport),它告訴函數已準備好導出或類似的東西,但我不能在C#中使用這個dll我想。

我認爲這是一個基本的問題,但是這是我第一次創造了C#DLL所以請幫助我。

謝謝。

+0

因爲dllimport屬性用於非託管動態鏈接庫(DLL)在它的情況下它的託管common.dll,U只能將common.dll的引用添加到您的新項目 – Smack 2012-02-01 06:49:38

回答

3

Ahmed如果您想將任何項目轉換爲庫(.dll),請雙擊解決方案資源管理器中的「屬性」文件夾。單擊項目類型的下拉列表並選擇「類庫」,然後單擊生成,重建解決方案以重新編譯爲.dll。

注意,您可以通過右鍵單擊解決方案,然後單擊「添加項目」在同一個解決方案創建一個新的ASP.NET項目。或者你可以打開一個新的Visual Studio實例。打開ASP.NET項目後,右鍵單擊引用並單擊添加引用。單擊瀏覽選項卡,導航到包含.dll的文件夾並添加它。不要忘記,在.dll中定義的任何類都必須標記爲public,否則它們將不會在其他程序集中可見。另外,不要忘記在你的類中定義的命名空間的使用語句。

當你點擊'運行按鈕'(綠色箭頭)時,它將始終運行解決方案資源管理器中以粗體顯示的項目。如果一個.dll加粗,那麼你會得到一個錯誤,你不能運行一個類庫,但你必須改變它到控制檯應用程序。如果它是一個控制檯應用程序,那麼它必須定義一個靜態無效的Main()函數,以便它知道從哪裏開始。您可以通過在解決方案資源管理器中右鍵單擊它來將任何項目設置爲啓動項目,然後單擊「設置爲啓動項目」。

如果你想在你的解決方案運行一個程序,但不希望將其設置爲啓動程序比你可以右鍵點擊,進入調試和運行。在單一解決方案中組織類似項目可以使維護更加容易。

希望這會有所幫助。

+0

謝謝你的詳細答案,我是試圖按照互聯網上提供的指南,但沒有注意到它們是特定於C++而不是C#再次感謝。 – Ahmed 2012-02-02 09:46:38

1

你並不需要使用DllImport。由於common.dll是一個託管程序集,因此您只需將其作爲參考添加到嘗試使用NewString的ASP.NET項目中即可。

1

如果您的程序集是用c#編寫的,則不需要dllimport。更想去添加像so引用 - msdn entry(去瀏覽

1

在網站的Bin文件夾中粘貼的DLL,您可以通過「使用」在類文件的頂部使用,那麼你將獲取所有的DLL的方法。

相關問題