asp.net源程序编译为dll文件并调用的实现过程

很多时候,我们需要将.cs文件单独编译成.dll文件,这就需要使用csc命令将.cs文件编译成.dll动态链接库文件。具体的操作步骤如下:

打开命令窗口->输入cmd到控制台->cd C:WINDOWSMicrosoft.NETFrameworkv1.1.4322

转到vs.net安装的该目录下->执行csc命令csc /target:library File.cs->在该目录下产生一个对应名字的.dll文件(前提:把.cs文件放到C:WINDOWSMicrosoft.NETFrameworkv1.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文件里

一、 动态链接库概述:

什么是动态链接库?DLL三个字母是Dynamic Link Library 的缩写形式,动态链接库 (DLL) 是作为共享函数库的可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。

和大多数程序员一样,你一定很使用过DLL吧。也曾感受到它的带给你程序设计和编码上的好处吧!今天这里探讨一个主题:如何在C#创建和调用DLL(动态链接库), 其实在很大意义上而讲,DLL让我更灵活的组织编写我们的应用程序,作为软件设计者,可一个根据它来达到很高的代码重用效果。下面我来介绍一下在C#中如何创建和调用DLL。

二、准备工作

我们需要对我们接下来要做的事情做个简单的介绍,在本文我们将利用C#语言创建一个名为 MyDLL.DLL的动态链接库,在这个动态链接库文件中我们将提供两个功能一个是对两个参数交换他们的值,另一个功能是求两个参数的最大公约数。然后创建一个应用程序使用这个DLL。运行并输出结果。

三、创建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!我们创建动态链接库文件的任务完成了,现在是我们享受劳动成果的时候了,下面我将介绍如何使用我们所创建的动态链接库文件。

四、使用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:MyDLL.DLL MyClient.cs

/out 编译器选项通知编译器输出 EXE 文件并且指定输出文件名 (MyClient.exe)。/reference 编译器选项指定该程序所引用的 DLL 文件。

五、执行

若要运行程序,请输入 EXE 文件的名称,文件名的后面跟两个数字,例如:MyClient 123 456

六、输出

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

七、小结:

动态链接具有下列优点:

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 模块。

(0)

相关推荐

  • asp.net网站开发包wq.dll打包下载

    并不是我不开源,我是觉得包起来方便一点,我没有加密,要看源代码的直接反编一下就看到了. 所有WQ对象,按照他们的功能进行了分类,分别放在5个不同的名称空间下: 复制代码 代码如下: using WQ.Data;//数据库操作类 using WQ.Rewriter;//伪URL配置类 using WQ.Server;//服务器信息类(这个没完成) using WQ.Text;//字符串操作类(这是个静态类,全是静态方法) using WQ.Web;//网页常用类(目前只完成了图片水印类) 压缩包下

  • 手动把asp.net的类生成dll文件的方法

    开始->程序->Microsoft Visual Studio 2005->Visual Studio Tools->Visual Studio 2005 命令提示 然后进入你的类目录,比如你的类文件是在E:/test/App_Code下面, 输入如下命令: csc /target:library File.cs 其中file.cs为你的类文件. 然后即可生成同名的dll文件!!! 自定义服务器控件分为两种: 1.一种是用*.aspx代码和*.cs代码编译后生成DLL,再添加引用到

  • Asp.Net数据控件引用AspNetPager.dll分页实现代码

    1.也许讲解有点初级,希望高手不要"喷"我,因为我知道并不是每一个人都是高手,我也怕高手们说我装13,小生不才: 2.如有什么不对的地方,还希望大家指出,一定虚心学习: 3.本文属于作者原创,尊重他人劳动成果,转载请注明作者,谢谢. 下面开讲: 第一步:首先是下载一个AspNetPager.dll 下载地址 AspNetPager.rar第二步:在项目的bin文件夹下引用AspNetPager.dll 如图: 第三步:在工具箱添加AspNetPager控件,如图: 接下来再如图: 这样

  • asp.net 大文件上传 之 改版了的SlickUpload.HttpUploadModule(Krystalware.SlickUpload.dll)

    /200905/yuanma/SlickUpload.rar/200905/yuanma/Krystalware.SlickUpload.rar 复制代码 代码如下: using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using S

  • ASP.NET MVC中EasyUI的datagrid跨域调用实现代码

    最近项目中需要跨域调用其他项目的数据,其他项目也是使用的EasyUI的datagrid组件,开始以为直接在datagrid的url属性定义为其他项目的url地址即可,可是测试下发现的确是返回了json数据但是json数据提示"invalid label" 错误,网上搜索了下错误解决办法,参考 "JavaScript处理Json的invalid label错误解决办法"的方法利用datagrid的loadData方法加载并转换了json还是提示上述错误,感觉原因不在格

  • asp.net无法加载oci.dll等错误的解决方法

    解决方法一 修复方法: 1:找到oracle客户端的安装目录,例如:E:/oracle/ora92,选中目录,在"属性--安全"里面删掉"ASP .NET.Users用户"然后再添加进去,并赋予"完全控制或者修改权限":将everyone赋予"完全控制或者修改权限",注意:网站的目录权限也要设置为ervryone完全访问,不然oracle好了,网站同样访问不了.重新启动.2:最简单直接的方法是启用ASP .Net用户模拟,在w

  • ASP.NET利用MD.DLL转EXCEL具体实现

    前提: 引入MD.dll 文件: 下载地址:http://www.jb51.net/dll/MD.dll.html 1.建立无CS文件的DownExcel.aspx 文件 复制代码 代码如下: <%@ Page Language="C#" %> <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.SqlClient" %>

  • 在asp.net(c#)下实现调用cmd的方法

    下面以ping 为例用到命名空间System.Diagnostics: System.Diagnostics 命名空间 包含了能够与系统进程 事件日志 和性能计数器进行交互的类 一般用于帮助诊断和调试应用程序 例如 Debug类用于帮组调试代码 Process类能够控制进程访问 Trace类能够跟踪代码的执行情况 Process 用于操作本地或者远程进程打访问 通过Process 可以在托管环境下很容易的操作对外部进程的启动或者停止 . 复制代码 代码如下: using System; usin

  • PHP中调用ASP.NET的WebService的代码

    其中有个web method像这样的: 复制代码 代码如下: [WebMethod] public string HelloWorld() { return "Hello World"; } ok,一切就绪.在某php文件中如下写法: php5本身就支持SOAP调用Web Service: 复制代码 代码如下: <?php //get localization strings from C# webservice $client = new SoapClient('http://

  • asp.net源程序编译为dll文件并调用的实现过程

    很多时候,我们需要将.cs文件单独编译成.dll文件,这就需要使用csc命令将.cs文件编译成.dll动态链接库文件.具体的操作步骤如下: 打开命令窗口->输入cmd到控制台->cd C:WINDOWSMicrosoft.NETFrameworkv1.1.4322 转到vs.net安装的该目录下->执行csc命令csc /target:library File.cs->在该目录下产生一个对应名字的.dll文件(前提:把.cs文件放到C:WINDOWSMicrosoft.NETFra

  • C#实现将javascript文件编译成dll文件的方法

    本文实例讲述了C#实现将javascript文件编译成dll文件的方法.分享给大家供大家参考,具体如下: 第一步:新建项目 添加js文件 写个测试Function (JScript.js) 单击JS文件属性.将 生成操作 改成嵌入的资源 第二步:在项目文件中添加一个类文件  该 类继承System.Web.UI.WebControl类 并重写控件预呈现的方法 代码如下: public class ClientScript:System.Web.UI.WebControls.WebControl

  • Golang 编译成DLL文件的操作

    首先撰写golang程序exportgo.go: package main import "C" import "fmt" //export PrintBye func PrintBye() { fmt.Println("From DLL: Bye!") } //export Sum func Sum(a int, b int) int { return a + b; } func main() { // Need a main function

  • 巧用ASP.NET预编译Web应用程序规避调用延迟的方法

    自从ASP.NET面市以来,开发人员一直都在要求(微软)出台一个解决办法,而ASP.NET 2.0利用预编译提供了一个有效的解决方案. 预编译选项 在首次启动应用程序的时候,ASP.NET会动态地分析和编译所有的ASP.NET文件(aspx页面).运行环境要对编译的结果进行缓冲,以便更好地服务未来所有的请求. 在服务器重启或者Web服务器重启之后,第一次启动应用程序也意味着这一过程要重新开始.而且,对应用程序任何文件的改变都会被系统检测到,而在文件发生改变之后首次运行应用程序也会让这一过程再次发

  • 把js文件编译成dll供页面调用的方法

    1. 在解决方案中添加一个项目:JSControl 2. 在这个项目添加一个js文件(JScript1.js) 脚本的内容: function showAlert(){ alert('Today is a good dary'); } 3. 改变JScript1.js的属性,Build Action为Embedded Resource(嵌入的资源) 4. 在JSControl项目的AssemblyInfo.cs文件中添加一行:(注意JSControl.JScript1.js,JSControl是

  • 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\Framewor

  • .dll 文件反编译的工具软件集合

    .dll 文件反编译的工具软件:    Reflector for .NET Remotesoft .NET Explorer Remotesoft .NET Explorer 支持asp.net2.0 要真正反编译.dll文件就在网站上使用该软件去操作,可以完成反编译出源码,因为是共享软件,所以在下载来的,不能完成反编译出源码,要看源码的最好是在网站编译,下面有链接链接:http://www.remotesoft.com/salamander/http://www.remotesoft.com

  • 保护.net中的dll文件方法(防止破解、反编译dll)

    .net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行.中间语言很容易被反编译,所以研究下如何有效的保护dll文件. 我大致的方法为 :强签名+混淆+加密. 强签名 强命名程序集,可以确保你的程序集唯一,而不被篡改.冒用等:即使相同名字的程序集如果签名也会不同.强签名很简单 为项目添加强名称方法:1.右键单击项目,打开属性窗口;2.在属性窗口里选择<签名>标签,选中为程序集签名的选项,在下拉列表里选择新建,如下图

  • 使用VB将ASP代码封装到DLL文件

    很久以前的文档,整理出来,回味一下 使用VB封装ASP,建立SayHello测试程序 1.打开VB6,新建ActiveX DLL 2.在工程引用中加入Microsoft Active Server Pages Object Library选择 3.填加代码如下: 'Code Start '声明部分 Private MyScriptingContext As ScriptingContext Private MyApplication As Application Private MyReques

随机推荐