asp调用asp.net生成的动态链接库

来源:互联网 发布:男士网红淘宝店铺 编辑:程序博客网 时间:2024/06/05 07:56

这几天在做一些asp的工作,发现这个语言真的很不好用,业务处理能力太差了,难怪微软急忙推出asp.net来作为它的替代品。可是asp作为一个流行这么多年的语言,已经占据不少的市场份额,asp.net作为一个全新的平台和asp很不一样难做移植,那我们能不能用asp直接调用.net的库呢,下面来展示一个可行的解决方案:

A,首先用VS2010新建一个C#类库项目,我们在里面定义一个测试类:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace ClassLibrary1{    [ComVisible(true)]                            //对com可见    [ClassInterface(ClassInterfaceType.AutoDual)] //对com公开    public class Class1    {        public string combine(string a, string b) {            return a + b;        }    }}//ClassInterfaceType的选择可以参照下面链接的说明,我这里尽量简化代码//http://archive.cnblogs.com/a/1527632/
B,打开开始菜单中Visual Studio 命令提示(2010)工具

C:\>sn -k c:\myKey.snk

创建签名文件myKey.snk,然后在C#项目上右键,点击属性,选择签名,选中为程序集签名,选择myKey.snk文件,运行项目生成dll文件

在命令提示工具里面切换到dll所在目录

F:\nsp>tlbexp ClassLibrary1.dll /out:ClassLibrary1.tlbMicrosoft (R) .NET Framework Assembly to Type Library Converter 4.0.30319.1Copyright (C) Microsoft Corporation.  All rights reserved.Assembly exported to 'F:\nsp\ClassLibrary1.tlb'F:\nsp>regasm ClassLibrary1.dll /tlb ClassLibrary1.tlb /codebaseMicrosoft(R) .NET Framework 程序集注册实用工具 4.0.30319.1版权所有(C) Microsoft Corporation 1998-2004。保留所有权利。成功注册了类型成功注册了导出到“F:\nsp\ClassLibrary1.tlb”的程序集和类型库F:\nsp>gacutil /i ClassLibrary1.dllMicrosoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.1版权所有(C) Microsoft Corporation。保留所有权利。程序集已成功添加到缓存中F:\nsp>
执行上面的一组操作,分别生成tlb类型库文件,导入注册表(此时dll可以作为com使用),将dll程序集加到GAC(全局程序集缓存)

C,创建一个test.asp文件,输入如下代码

<%    set s = CreateObject("ClassLibrary1.Class1")    Response.Write(s.combine("Hello","World"))%>

打开浏览器或者运行IDE查看,字符串已经被拼接起来。


如上面那个链接中说,在产品里面用ClassInterfaceType.AutoDual并不好,具体原因我不是很理解,我们可以像下面一样实现一个接口

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace ClassLibrary1{    interface IClass1    {        string combine(string a, string b);    }    [ComVisible(true)]                            //对com可见    [ClassInterface(ClassInterfaceType.None)]     //对com公开    public class Class1:IClass1    {        public string combine(string a, string b) {            return a + b;        }    }}
剩下的步骤和B一样,不论怎样,能在功能简单的asp里面调用asp.net封装的dll还是感觉很好,不过不知道服务器是否还需要.net framework的支持。