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

这几天在做一些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.tlb
Microsoft (R) .NET Framework Assembly to Type Library Converter 4.0.30319.1
Copyright (C) Microsoft Corporation.  All rights reserved.

Assembly exported to 'F:\nsp\ClassLibrary1.tlb'

F:\nsp>regasm ClassLibrary1.dll /tlb ClassLibrary1.tlb /codebase
Microsoft(R) .NET Framework 程序集注册实用工具 4.0.30319.1
版权所有(C) Microsoft Corporation 1998-2004。保留所有权利。

成功注册了类型
成功注册了导出到“F:\nsp\ClassLibrary1.tlb”的程序集和类型库

F:\nsp>gacutil /i ClassLibrary1.dll
Microsoft (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的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值