国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#生成DLL文件的方法小結(jié)

2019-10-29 21:41:41
字體:
供稿:網(wǎng)友
這篇文章主要介紹了C#生成DLL文件的方法小結(jié),需要的朋友可以參考下
 

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

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

打開命令窗口->輸入cmd到控制臺->cd C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322

轉(zhuǎn)到vs.net安裝的該目錄下->執(zhí)行csc命令csc /target:library File.cs->在該目錄下產(chǎn)生一個對應(yīng)名字的.dll文件(前提:把.cs文件放到C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322目錄下)

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

譯 File.cs 以產(chǎn)生 File.exe

csc File.cs 編譯 File.cs 以產(chǎn)生 File.dll 
csc /target:library File.cs 編譯 File.cs 并創(chuàng)建 My.exe 
csc /out:My.exe File.cs 通過使用優(yōu)化和定義 DEBUG 符號,編譯當(dāng)前目錄中所有的 C# 文件。輸出為 File2.exe
csc /define:DEBUG /optimize /out:File2.exe *.cs 編譯當(dāng)前目錄中所有的 C# 文件,以產(chǎn)生 File2.dll 的調(diào)試版本。不顯示任何徽標(biāo)和警告 
csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs 將當(dāng)前目錄中所有的 C# 文件編譯為 Something.xyz(一個 DLL) 
csc /target:library /out:Something.xyz *.cs 編譯 File.cs 以產(chǎn)生 File.dll 
csc /target:library File.cs這個就是我們使用最多的一個命令,其實可以簡單的寫成csc /t:library File.cs,另外的一個寫法是 csc /out:mycodebehind.dll /t:library mycodebehind.cs,這個可以自己指定輸出的文件名。 
csc /out:mycodebehind.dll /t:library mycodebehind.cs mycodebehind2.cs,這個的作用是把兩個cs文件裝到一個.dll文件里 

csc不是內(nèi)部或外部命令,也不是可運行的程序解決方法

針對VisualStudio2005
1:右鍵點擊"我的電腦"--"屬性"--"高級"--"環(huán)境變量"--"系統(tǒng)變量"
將PATH中加上路徑:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/
2:直接在dos環(huán)境的cs相應(yīng)文件夾目錄執(zhí)行
Path=C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/
3:VisualStudio2005命令提示
開始--》程序---》Microsoft Visual Studio2005---->Visual Studio Tools--->VisualStudio2005命令提示
把cs文件copy到C:/Program Files/Microsoft Visual Studio 8/VC/
4:C:/autoexec.bat
加入:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/

 

vs2008 下
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/ 里的CSC.EXE 是2.0版本
編譯的.cs文件如果帶using System.Linq;編譯通不過,如果不用LINQ語法刪除using System.Linq;即可,否則 調(diào)用C:/WINDOWS/Microsoft.NET/Framework/v3.5里的CSC.EXE

同一SLN下 里面 class 直接訪問類庫。
封裝到DLL。 導(dǎo)入DLL 添加using namespace 工有才能訪問。


一、 動態(tài)鏈接庫

什么是動態(tài)鏈接庫?DLL三個字母對于你來說一定很熟悉吧,它是Dynamic Link Library 的縮寫形式,動態(tài)鏈接庫 (DLL) 是作為共享函數(shù)庫的可執(zhí)行文件。動態(tài)鏈接提供了一種方法,使進(jìn)程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。函數(shù)的可執(zhí)行代碼位于一個 DLL 中,該 DLL 包含一個或多個已被編譯、鏈接并與使用它們的進(jìn)程分開存儲的函數(shù)。DLL 還有助于共享數(shù)據(jù)和資源。多個應(yīng)用程序可同時訪問內(nèi)存中單個 DLL 副本的內(nèi)容。

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

二、準(zhǔn)備工作

  我們需要對我們接下來要做的事情做個簡單的介紹,在本文我們將利用C#語言創(chuàng)建一個名為 MyDLL.DLL的動態(tài)鏈接庫,在這個動態(tài)鏈接庫文件中我們將提供兩個功能一個是對兩個參數(shù)交換他們的值,另一個功能是求兩個參數(shù)的最大公約數(shù)。然后創(chuàng)建一個應(yīng)用程序使用這個DLL。運行并輸出結(jié)果。

三、創(chuàng)建DLL

讓我們創(chuàng)建以下三個C#代碼文件:

1、 MySwap.cs
 

  1. using System;  
  2. namespace MyMethods   
  3. {  
  4.    public class SwapClass   
  5.    {  
  6.      public static bool Swap(ref long i,ref long j)   
  7.      {   
  8.         i = i+j;  
  9.         j = i-j;  
  10.         i = i-j;  
  11.         return true;   
  12.       }  
  13.     }  
  14. }  
?

2、MyMaxCD.cs
 

  1. using System;  
  2. namespace MyMethods  
  3.  
  4. {  
  5.    public class MaxCDClass  
  6.    {  
  7.      public static long MaxCD(long i, long j)  
  8.      {  
  9.         long a,b,temp;  
  10.         if(i>j)  
  11.         {  
  12.           a = i;  
  13.           b = j;  
  14.         }  
  15.         else 
  16.         {  
  17.           b = i;  
  18.           a = j;  
  19.         }  
  20.         temp = a % b;  
  21.         while(temp!=0)  
  22.         {  
  23.           a = b;  
  24.           b = temp;  
  25.           temp = a % b;  
  26.         }  
  27.         return b;  
  28.       }  
  29.     }  
?

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

接下來的任務(wù)是把這兩個cs文件變成我們需要的DLL文件。方法是這樣的:在安裝了Microsoft.NET Framework的操作系統(tǒng)上,我們可以在Windows所在目錄下找到Microsoft.NET目錄。在這個目錄下面提供了C#的編譯器,CSC.EXE運行:csc /target:library /out:MyDLL.DLL MySwap.cs MyMaxCD.cs,完成后可在本目錄下面找到我們剛才生成的MyDLL.DLL文件/target:library 編譯器選項通知編譯器輸出 DLL 文件而不是 EXE 文件。后跟文件名的 /out 編譯器選項用于指定 DLL 文件名。如果/out后面不跟文件名編譯器使用第一個文件 (MySwap.cs) 作為 DLL 文件名。生成的文件為MySwap.DLL文件。

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

MyClient.cs
 

  1. using System;   
  2.  
  3. using MyMethods; //這里我們引用剛才定義的名稱空間,如果剛才的兩個文件我們寫在兩個不同的名稱空間  
  4. class MyClient   
  5. {  
  6.    public static void Main(string[] args)   
  7.    {  
  8.      if (args.Length != 2)   
  9.      {  
  10.        Console.WriteLine("Usage: MyClient <num1> <num2>");   
  11.        return;   
  12.      }  
  13.      long num1 = long.Parse(args[0]);   
  14.      long num2 = long.Parse(args[1]);   
  15.      SwapClass.Swap(ref num1,ref num2);  
  16.    // 請注意,文件開頭的 using 指令使您得以在編譯時使用未限定的類名來引用 DLL 方法  
  17.      Console.WriteLine("The result of swap is num1 = {0} and num2 ={1}",num1, num2);  
  18.      long maxcd = MaxCDClass.MaxCD(num1,num2);  
  19.      Console.WriteLine("The MaxCD of {0} and {1} is {2}",num1, num2, maxcd);   
  20.    }  
?

若要生成可執(zhí)行文件 MyClient.exe,請使用以下命令行:
csc /out:MyClient.exe /reference:MyLibrary.DLL MyClient.cs
/out 編譯器選項通知編譯器輸出 EXE 文件并且指定輸出文件名 (MyClient.exe)。/reference 編譯器選項指定該程序所引用的 DLL 文件。

五、執(zhí)行

若要運行程序,請輸入 EXE 文件的名稱,文件名的后面跟兩個數(shù)字,例如:MyClient 123 456

六、輸出

The result of swap is num1 = 456 and num2 = 123 
The MaxCD of 456 and 123 is 3

七、小結(jié)

 

動態(tài)鏈接具有下列優(yōu)點:

  1、節(jié)省內(nèi)存和減少交換操作。很多進(jìn)程可以同時使用一個 DLL,在內(nèi)存中共享該 DLL 的一個副本。相反,對于每個用靜態(tài)鏈接庫生成的應(yīng)用程序,Windows 必須在內(nèi)存中加載庫代碼的一個副本。 
  2、節(jié)省磁盤空間。許多應(yīng)用程序可在磁盤上共享 DLL 的一個副本。相反,每個用靜態(tài)鏈接庫生成的應(yīng)用程序均具有作為單獨的副本鏈接到其可執(zhí)行圖像中的庫代碼。     3、升級到 DLL 更為容易。DLL 中的函數(shù)更改時,只要函數(shù)的參數(shù)和返回值沒有更改,就不需重新編譯或重新鏈接使用它們的應(yīng)用程序。相反,靜態(tài)鏈接的對象代碼要求在函數(shù)更改時重新鏈接應(yīng)用程序。 
  4、提供售后支持。例如,可修改顯示器驅(qū)動程序 DLL 以支持當(dāng)初交付應(yīng)用程序時不可用的顯示器。 
  5、支持多語言程序。只要程序遵循函數(shù)的調(diào)用約定,用不同編程語言編寫的程序就可以調(diào)用相同的 DLL 函數(shù)。程序與 DLL 函數(shù)在下列方面必須是兼容的:函數(shù)期望其參數(shù)被推送到堆棧上的順序,是函數(shù)還是應(yīng)用程序負(fù)責(zé)清理堆棧,以及寄存器中是否傳遞了任何參數(shù)。 
  6、提供了擴展 MFC 庫類的機制。可以從現(xiàn)有 MFC 類派生類,并將它們放到 MFC 擴展 DLL 中供 MFC 應(yīng)用程序使用。 
  7、使國際版本的創(chuàng)建輕松完成。通過將資源放到 DLL 中,創(chuàng)建應(yīng)用程序的國際版本變得容易得多。可將用于應(yīng)用程序的每個語言版本的字符串放到單獨的 DLL 資源文件中,并使不同的語言版本加載合適的資源。 
  使用 DLL 的一個潛在缺點是應(yīng)用程序不是獨立的;它取決于是否存在單獨的 DLL 模塊


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 合作市| 游戏| 昌黎县| 客服| 醴陵市| 论坛| 堆龙德庆县| 邹平县| 巴彦淖尔市| 嘉鱼县| 东乌珠穆沁旗| 深泽县| 临朐县| 新丰县| 金平| 邯郸县| 宣恩县| 江都市| 阜新市| 宕昌县| 烟台市| 霸州市| 黔西县| 柯坪县| 阿拉善左旗| 健康| 宣城市| 泸定县| 金平| 永兴县| 易门县| 夹江县| 临湘市| 枝江市| 潢川县| 张北县| 乌拉特前旗| 平南县| 枣庄市| 河池市| 平南县|