最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年07月06日 23:18:21   投稿:mdxy-dxy  
這篇文章主要介紹了C#生成DLL文件的方法小結(jié),需要的朋友可以參考下

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

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

打開(kāi)命令窗口->輸入cmd到控制臺(tái)->cd C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322

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

csc命令的方式很多,請(qǐng)參考以下

譯 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 通過(guò)使用優(yōu)化和定義 DEBUG 符號(hào),編譯當(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(一個(gè) DLL)
csc /target:library /out:Something.xyz *.cs 編譯 File.cs 以產(chǎn)生 File.dll
csc /target:library File.cs這個(gè)就是我們使用最多的一個(gè)命令,其實(shí)可以簡(jiǎn)單的寫(xiě)成csc /t:library File.cs,另外的一個(gè)寫(xiě)法是 csc /out:mycodebehind.dll /t:library mycodebehind.cs,這個(gè)可以自己指定輸出的文件名。
csc /out:mycodebehind.dll /t:library mycodebehind.cs mycodebehind2.cs,這個(gè)的作用是把兩個(gè)cs文件裝到一個(gè).dll文件里

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

針對(duì)VisualStudio2005
1:右鍵點(diǎn)擊"我的電腦"--"屬性"--"高級(jí)"--"環(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命令提示
開(kāi)始--》程序---》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;編譯通不過(guò),如果不用LINQ語(yǔ)法刪除using System.Linq;即可,否則 調(diào)用C:\WINDOWS\Microsoft.NET\Framework\v3.5里的CSC.EXE

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


一、 動(dòng)態(tài)鏈接庫(kù)

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

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

二、準(zhǔn)備工作

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

三、創(chuàng)建DLL

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

1、 MySwap.cs

using System; 
namespace MyMethods  
{ 
   public class SwapClass  
   { 
     public static bool Swap(ref long i,ref long j)  
     {  
        i = i+j; 
        j = i-j; 
        i = i-j; 
        return true;  
      } 
    } 
} 

2、MyMaxCD.cs

using System; 
namespace MyMethods 

{ 
   public class MaxCDClass 
   { 
     public static long MaxCD(long i, long j) 
     { 
        long a,b,temp; 
        if(i>j) 
        { 
          a = i; 
          b = j; 
        } 
        else
        { 
          b = i; 
          a = j; 
        } 
        temp = a % b; 
        while(temp!=0) 
        { 
          a = b; 
          b = temp; 
          temp = a % b; 
        } 
        return b; 
      } 
    } 
} 

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

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

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

MyClient.cs

using System;  

using MyMethods; //這里我們引用剛才定義的名稱(chēng)空間,如果剛才的兩個(gè)文件我們寫(xiě)在兩個(gè)不同的名稱(chēng)空間 
class MyClient  
{ 
   public static void Main(string[] args)  
   { 
     if (args.Length != 2)  
     { 
       Console.WriteLine("Usage: MyClient <num1> <num2>");  
       return;  
     } 
     long num1 = long.Parse(args[0]);  
     long num2 = long.Parse(args[1]);  
     SwapClass.Swap(ref num1,ref num2); 
   // 請(qǐng)注意,文件開(kāi)頭的 using 指令使您得以在編譯時(shí)使用未限定的類(lèi)名來(lái)引用 DLL 方法 
     Console.WriteLine("The result of swap is num1 = {0} and num2 ={1}",num1, num2); 
     long maxcd = MaxCDClass.MaxCD(num1,num2); 
     Console.WriteLine("The MaxCD of {0} and {1} is {2}",num1, num2, maxcd);  
   } 
} 

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

五、執(zhí)行

若要運(yùn)行程序,請(qǐng)輸入 EXE 文件的名稱(chēng),文件名的后面跟兩個(gè)數(shù)字,例如:MyClient 123 456

六、輸出

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

七、小結(jié)

動(dòng)態(tài)鏈接具有下列優(yōu)點(diǎn):

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

相關(guān)文章

  • C#控件閃爍的解決方法

    C#控件閃爍的解決方法

    這篇文章主要介紹了C#控件閃爍的解決方法,涉及SetStyle函數(shù)的使用技巧,需要的朋友可以參考下
    2015-01-01
  • C#實(shí)現(xiàn)炫酷啟動(dòng)圖-動(dòng)態(tài)進(jìn)度條效果

    C#實(shí)現(xiàn)炫酷啟動(dòng)圖-動(dòng)態(tài)進(jìn)度條效果

    這篇文章主要介紹了基于C#實(shí)現(xiàn)炫酷啟動(dòng)圖-動(dòng)態(tài)進(jìn)度條 效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • WPF自定義Panel的示例詳解

    WPF自定義Panel的示例詳解

    WPF中默認(rèn)的拖放操作可能并不是那么好用,為了解決這個(gè)問(wèn)題,我們可以自定義一個(gè)?Panel?來(lái)實(shí)現(xiàn)更簡(jiǎn)單的拖拽操作,下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧
    2024-03-03
  • 簡(jiǎn)單實(shí)現(xiàn)C#窗體程序判斷是否閏年

    簡(jiǎn)單實(shí)現(xiàn)C#窗體程序判斷是否閏年

    這篇文章主要介紹了簡(jiǎn)單實(shí)現(xiàn)C#窗體程序判斷是否閏年的相關(guān)代碼,禁止窗體調(diào)整大小,關(guān)閉窗體前的判斷,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C#中的Explicit和Implicit詳情

    C#中的Explicit和Implicit詳情

    Implicit提高了代碼的可讀性,但程序員需要自己保證轉(zhuǎn)換不引發(fā)異常且不丟失信息、Explicit可阻止編譯器靜默調(diào)用可能產(chǎn)生意外后果的轉(zhuǎn)換操作。前者更易于使用,后者能向閱讀代碼的每個(gè)人清楚地指示您要轉(zhuǎn)換類(lèi)型,下面就和小編來(lái)一起學(xué)習(xí)吧
    2021-09-09
  • extern外部方法使用C#的實(shí)現(xiàn)方法

    extern外部方法使用C#的實(shí)現(xiàn)方法

    這篇文章主要介紹了extern外部方法使用C#的實(shí)現(xiàn)方法,較為詳細(xì)的分析了外部方法使用C#的具體步驟與實(shí)現(xiàn)技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(三)

    關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(三)

    在前面例子中,由于MyClass類(lèi)型的對(duì)象是顯示創(chuàng)建的,因此使用反射技術(shù)來(lái)調(diào)用MyClass上的方法沒(méi)有任何優(yōu)勢(shì)--以普通的方式調(diào)用對(duì)象上的方法會(huì)簡(jiǎn)單的多
    2013-07-07
  • 詳解C#中 Thread,Task,Async/Await,IAsyncResult的那些事兒

    詳解C#中 Thread,Task,Async/Await,IAsyncResult的那些事兒

    本文主要介紹了C#中 Thread,Task,Async/Await,IAsyncResult的相關(guān)知識(shí)。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • C#可變參數(shù)params示例詳解

    C#可變參數(shù)params示例詳解

    params是c#的一個(gè)關(guān)鍵字,用用漢語(yǔ)來(lái)說(shuō)的話叫可變參數(shù),這里的可變,不是說(shuō)的類(lèi)型可變,而是指的個(gè)數(shù)可變,這是c#的一個(gè)基礎(chǔ)關(guān)鍵字,相信大家都有一定的了解,本篇文章就來(lái)大致的說(shuō)一下C#可變參數(shù)params
    2022-02-02
  • c#中虛函數(shù)的相關(guān)使用方法

    c#中虛函數(shù)的相關(guān)使用方法

    若一個(gè)實(shí)例方法聲明前帶有virtual關(guān)鍵字,那么這個(gè)方法就是虛方法。
    2013-02-02

最新評(píng)論

衡东县| 黔江区| 迭部县| 新丰县| 河源市| 庆安县| 木里| 金塔县| 定陶县| 北碚区| 沁源县| 乌兰浩特市| 深州市| 禹州市| 枞阳县| 绥阳县| 韶山市| 阜新| 浦城县| 丰台区| 泗阳县| 板桥市| 寿阳县| 水城县| 库车县| 准格尔旗| 囊谦县| 景谷| 逊克县| 吴桥县| 邯郸县| 石河子市| 琼海市| 石首市| 左贡县| 泽州县| 海丰县| 天全县| 莲花县| 金昌市| 龙泉市|