熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

asp.net源程序編譯為dll文件並調用過程

2013-11-13 10:36:46  來源: .NET編程 

  使用csc命令將cs文件編譯成dll的過程

很多時候我們需要將cs文件單獨編譯成dll文件 操作如下:

打開命令窗口>輸入cmd到控制台>cd C:WINDOWSMicrosoftNETFrameworkv

轉到vsnet安裝的該目錄下>執行csc命令csc /target:library Filecs>在該目錄下產生一個對應名字的dll文件(前提:把cs文件放到C:WINDOWSMicrosoftNETFrameworkv目錄下)

csc命令的方式很多請參考以下

譯 Filecs 以產生 Fileexe

csc Filecs 編譯 Filecs 以產生 Filedll

csc /target:library Filecs 編譯 Filecs 並創建 Myexe

csc /out:Myexe Filecs 通過使用優化和定義 DEBUG 符號編譯當前目錄中所有的 C# 文件輸出為 Fileexe

csc /define:DEBUG /optimize /out:Fileexe *cs 編譯當前目錄中所有的 C# 文件以產生 Filedll 的調試版本不顯示任何徽標和警告

csc /target:library /out:Filedll /warn: /nologo /debug *cs 將當前目錄中所有的 C# 文件編譯為 Somethingxyz(一個 DLL)

csc /target:library /out:Somethingxyz *cs 編譯 Filecs 以產生 Filedll

csc /target:library Filecs這個就是我們使用最多的一個命令其實可以簡單的寫成csc /t:library Filecs另外的一個寫法是 csc /out:mycodebehinddll /t:library mycodebehindcs這個可以自己指定輸出的文件名

csc /out:mycodebehinddll /t:library mycodebehindcs mycodebehindcs這個的作用是把兩個cs文件裝到一個dll文件裡

舉例(摘於網絡)

 動態鏈接庫

        什麼是動態鏈接庫?DLL三個字母對於你來說一定很熟悉吧它是Dynamic Link Library 的縮寫形式動態鏈接庫 (DLL) 是作為共享函數庫的可執行文件動態鏈接提供了一種方法使進程可以調用不屬於其可執行代碼的函數函數的可執行代碼位於一個 DLL 中該 DLL 包含一個或多個已被編譯鏈接並與使用它們的進程分開存儲的函數DLL 還有助於共享數據和資源多個應用程序可同時訪問內存中單個 DLL 副本的內容

  和大多數程序員一樣你一定很使用過DLL吧也曾感受到它的帶給你程序設計和編碼上的好錯吧今天我想和大家探討一個主題如何在C#創建和調用DLL(動態鏈接庫) 其實在很大意義上而講DLL讓我更靈活的組織編寫我們的應用程序作為軟件設計者可一個根據它來達到很高的代碼重用效果下面我來介紹一下在C#中如何創建和調用DLL

准備工作

  我們需要對我們接下來要做的事情做個簡單的介紹在本文我們將利用C#語言創建一個名為 MyDLLDLL的動態鏈接庫在這個動態鏈接庫文件中我們將提供兩個功能一個是對兩個參數交換他們的值另一個功能是求兩個參數的最大公約數然後創建一個應用程序使用這個DLL運行並輸出結果

創建DLL

讓我們創建以下三個C#代碼文件

 MySwapcs

}

using System;

namespace MyMethods

{

     public class SwapClass

     {

          public static bool Swap(ref long iref long j)

          {

               i = i+j;

               j = ij;

               i = ij;

               return true;

           } 
       }
}

MyMaxCDcs

using System;

namespace MyMethods

{

     public class MaxCDClass

     {

          public static long MaxCD(long i long j)

          {

               long abtemp;

               if(i>j)

               {

                    a = i;

                    b = j;

               }

               else

               {

                    b = i;

                    a = j;

               }

               temp = a % b;

               while(temp!=)

               {

                    a = b;

                    b = temp;

                    temp = a % b;

               }

               return b;

            } 
       }
}

  需要注意的是我們在制作這兩個文件的時候可以用Visual StudioNET或者其他的文本編輯器就算是記事本也可以這兩個文件雖然不在同一個文件裡面但是他們是屬於同一個namespace(名稱空間)這對以後我們使用這兩個方法提供了方便當然他們也可以屬於不同的名稱空間這是完全可以的但只是在我們應用他們的時候就需要引用兩個不同的名稱空間所以作者建議還是寫在一個名稱空間下面比較好

  接下來的任務是把這兩個cs文件變成我們需要的DLL文件方法是這樣的在安裝了MicrosoftNET Framework的操作系統上我們可以在Windows所在目錄下找到MicrosoftNET目錄在這個目錄下面提供了C#的編譯器CSCEXE運行csc /target:library /out:MyDLLDLL MySwapcs MyMaxCDcs完成後可在本目錄下面找到我們剛才生成的MyDLLDLL文件/target:library 編譯器選項通知編譯器輸出 DLL 文件而不是 EXE 文件後跟文件名的 /out 編譯器選項用於指定 DLL 文件名如果/out後面不跟文件名編譯器使用第一個文件 (MySwapcs) 作為 DLL 文件名生成的文件為MySwapDLL文件

  OK!我們創建動態鏈接庫文件的任務完成了現在是我們享受勞動成果的時候了下面我將介紹如何使用我們所創建的動態鏈接庫文件   四使用DLL   我們簡單寫一個小程序來測試一下我們剛才寫的兩個方法是否正確好吧跟我來

MyClientcs

using System;

using MyMethods; //這裡我們引用剛才定義的名稱空間如果剛才的兩個文件我們寫在兩個不同的名稱空間

class MyClient

{

     public static void Main(string[] args)

     {

         if (argsLength != )

         {

              ConsoleWriteLine("Usage: MyClient <num> <num>");

              return;

         }

          long num = longParse(args[]);

          long num = longParse(args[]);

          SwapClassSwap(ref numref num);

   // 請注意文件開頭的 using 指令使您得以在編譯時使用未限定的類名來引用 DLL 方法

          ConsoleWriteLine("The result of swap is num = {} and num ={}"num num);

          long maxcd = MaxCDClassMaxCD(numnum);

          ConsoleWriteLine("The MaxCD of {} and {} is {}"num num maxcd);

     }

}

若要生成可執行文件 MyClientexe請使用以下命令行

csc /out:MyClientexe /reference:MyDLLDLL MyClientcs

/out 編譯器選項通知編譯器輸出 EXE 文件並且指定輸出文件名 (MyClientexe)/reference 編譯器選項指定該程序所引用的 DLL 文件

執行

若要運行程序請輸入 EXE 文件的名稱文件名的後面跟兩個數字例如MyClient  

輸出

The result of swap is num =  and num = 

The MaxCD of  and  is 

小結

動態鏈接具有下列優點

  1節省內存和減少交換操作很多進程可以同時使用一個 DLL在內存中共享該 DLL 的一個副本相反對於每個用靜態鏈接庫生成的應用程序Windows 必須在內存中加載庫代碼的一個副本

  2節省磁盤空間許多應用程序可在磁盤上共享 DLL 的一個副本相反每個用靜態鏈接庫生成的應用程序均具有作為單獨的副本鏈接到其可執行圖像中的庫代碼     3升級到 DLL 更為容易DLL 中的函數更改時只要函數的參數和返回值沒有更改就不需重新編譯或重新鏈接使用它們的應用程序相反靜態鏈接的對象代碼要求在函數更改時重新鏈接應用程序

  4提供售後支持例如可修改顯示器驅動程序 DLL 以支持當初交付應用程序時不可用的顯示器

  5支持多語言程序只要程序遵循函數的調用約定用不同編程語言編寫的程序就可以調用相同的 DLL 函數程序與 DLL 函數在下列方面必須是兼容的函數期望其參數被推送到堆棧上的順序是函數還是應用程序負責清理堆棧以及寄存器中是否傳遞了任何參數

  6提供了擴展 MFC 庫類的機制可以從現有 MFC 類派生類並將它們放到 MFC 擴展 DLL 中供 MFC 應用程序使用

  7使國際版本的創建輕松完成通過將資源放到 DLL 中創建應用程序的國際版本變得容易得多可將用於應用程序的每個語言版本的字符串放到單獨的 DLL 資源文件中並使不同的語言版本加載合適的資源

  使用 DLL 的一個潛在缺點是應用程序不是獨立的它取決於是否存在單獨的 DLL 模塊


From:http://tw.wingwit.com/Article/program/net/201311/14125.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.