程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#生成DLL文件的辦法小結

C#生成DLL文件的辦法小結

編輯:C#入門知識

C#生成DLL文件的辦法小結。本站提示廣大學習愛好者:(C#生成DLL文件的辦法小結)文章只能為提供參考,不一定能成為您想要的結果。以下是C#生成DLL文件的辦法小結正文


應用csc敕令將.cs文件編譯成.dll的進程

許多時刻,我們須要將.cs文件零丁編譯成.dll文件, 操作以下:

翻開敕令窗口->輸出cmd到掌握台->cd C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322

轉到vs.net裝置的該目次下->履行csc敕令csc /target:library File.cs->在該目次下發生一個對應名字的.dll文件(條件:把.cs文件放到C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322目次下)

csc敕令的方法許多,請參考以下

譯 File.cs 以發生 File.exe

csc File.cs 編譯 File.cs 以發生 File.dll
csc /target:library File.cs 編譯 File.cs 並創立 My.exe
csc /out:My.exe File.cs 經由過程應用優化和界說 DEBUG 符號,編譯以後目次中一切的 C# 文件。輸入為 File2.exe
csc /define:DEBUG /optimize /out:File2.exe *.cs 編譯以後目次中一切的 C# 文件,以發生 File2.dll 的調試版本。不顯示任何徽標和正告
csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs 將以後目次中一切的 C# 文件編譯為 Something.xyz(一個 DLL)
csc /target:library /out:Something.xyz *.cs 編譯 File.cs 以發生 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不是外部或內部敕令,也不是可運轉的法式處理辦法

針對VisualStudio2005
1:右鍵點擊"我的電腦"--"屬性"--"高等"--"情況變量"--"體系變量"
將PATH中加上途徑:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\
2:直接在dos情況的cs響應文件夾目次履行
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;便可,不然 挪用C:\WINDOWS\Microsoft.NET\Framework\v3.5裡的CSC.EXE

統一SLN下 外面 class 直接拜訪類庫。
封裝到DLL。 導入DLL 添加using namespace 工有能力拜訪。


1、 靜態鏈接庫

甚麼是靜態鏈接庫?DLL三個字母關於你來講必定很熟習吧,它是Dynamic Link Library 的縮寫情勢,靜態鏈接庫 (DLL) 是作為同享函數庫的可履行文件。靜態鏈接供給了一種辦法,使過程可以挪用不屬於其可履行代碼的函數。函數的可履行代碼位於一個 DLL 中,該 DLL 包括一個或多個已被編譯、鏈接並與應用它們的過程離開存儲的函數。DLL 還有助於同享數據和資本。多個運用法式可同時拜訪內存中單個 DLL 正本的內容。

  和年夜多半法式員一樣,你必定很應用過DLL吧。也曾感觸感染到它的帶給你法式設計和編碼上的好錯吧明天我想和年夜家商量一個主題:若何在C#創立和挪用DLL(靜態鏈接庫), 其其實很年夜意義上而講,DLL讓我更靈巧的組織編寫我們的運用法式,作為軟件設計者,可一個依據它來到達很高的代碼重用後果。上面我來引見一下在C#中若何創立和挪用DLL。

2、預備任務

  我們須要對我們接上去要做的工作做個簡略的引見,在本文我們將應用C#說話創立一個名為 MyDLL.DLL的靜態鏈接庫,在這個靜態鏈接庫文件中我們將供給兩個功效一個是對兩個參數交流他們的值,另外一個功效是求兩個參數的最年夜條約數。然後創立一個運用法式應用這個DLL。運轉並輸入成果。

3、創立DLL

讓我們創立以下三個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; 
      } 
    } 
} 

須要留意的是:我們在制造這兩個文件的時刻可以用Visual Studio.NET或許其他的文本編纂器,就算是記事本也能夠。這兩個文件固然不在統一個文件外面,然則他們是屬於統一個namespace(稱號空間)這對今後我們應用這兩個辦法供給了便利。固然他們也能夠屬於分歧的稱號空間,這是完整可以的,但只是在我們運用他們的時刻就須要援用兩個分歧的稱號空間,所以作者建議照樣寫在一個稱號空間上面比擬好。

接上去的義務是把這兩個cs文件釀成我們須要的DLL文件。辦法是如許的:在裝置了Microsoft.NET Framework的操作體系上,我們可以在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!我們創立靜態鏈接庫文件的義務完成了,如今是我們享用休息結果的時刻了,上面我將引見若何應用我們所創立的靜態鏈接庫文件。 4、應用DLL 我們簡略寫一個小法式來測試一下我們適才寫的兩個辦法能否准確,好吧,跟我來:

MyClient.cs

using System;  

using MyMethods; //這裡我們援用適才界說的稱號空間,假如適才的兩個文件我們寫在兩個分歧的稱號空間 
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); 
   // 請留意,文件開首的 using 指令使您得以在編譯時應用未限制的類名來援用 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);  
   } 
} 

若要生成可履行文件 MyClient.exe,請應用以下敕令行:
csc /out:MyClient.exe /reference:MyLibrary.DLL MyClient.cs
/out 編譯器選項告訴編譯器輸入 EXE 文件而且指定輸入文件名 (MyClient.exe)。/reference 編譯器選項指定該法式所援用的 DLL 文件。

5、履行

若要運轉法式,請輸出 EXE 文件的稱號,文件名的前面跟兩個數字,例如:MyClient 123 456

6、輸入

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

7、小結

靜態鏈接具有以下長處:

  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 模塊

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved