我用c#.NET生成的DLL文件无法注册 这样ASP 就不能引用

kissed 2008-08-28 12:36:19
我用c#.NET生成的DLL文件无法注册 这样ASP 就不能引用


我用c#.NET生成的DLL文件 注册时总是说缺少输入点 不能注册 请问怎么解决

我主要要实现这个目的 就是用c#.NET生成的DLL文件 这个文件我要在ASP里调用 各位大哥 谁能解决的 兄弟当跪谢
...全文
837 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanggd614 2009-12-11
  • 打赏
  • 举报
回复
关注中
宝_爸 2008-08-28
  • 打赏
  • 举报
回复
汗,我以为是asp.net呢。
diandian82 2008-08-28
  • 打赏
  • 举报
回复
asp不能调用.net的dll吧。没用过asp
宝_爸 2008-08-28
  • 打赏
  • 举报
回复
你用什么注册?Regsvr32?

.net的dll不需要注册,直接reference就可以了。

或者你像share你的dll,这样需要把dll放在GAC(Global Assembly Cache )里面。

How to: Install an Assembly into the Global Assembly Cache


There are four ways to install an assembly into the global assembly cache:

Using the Global Assembly Cache tool (Gacutil.exe).

You can use Gacutil.exe to add strong-named assemblies to the global assembly cache and to view the contents of the global assembly cache.

Note:
Gacutil.exe is only for development purposes and should not be used to install production assemblies into the global assembly cache.


Using Microsoft Windows Installer 2.0.

This is the recommended and most common way to add assemblies to the global assembly cache. The installer provides reference counting of assemblies in the global assembly cache, plus other benefits.

Using a Windows shell extension provided by the Windows Software Development Kit (SDK) called the Assembly Cache Viewer (Shfusion.dll).

The shell extension allows you to drag assemblies into the global assembly cache.

Using the .NET Framework Configuration Tool (Mscorcfg.msc).

The .NET Framework Configuration Tool (Mscorcfg.msc) allows you to view the global assembly cache and add new assemblies to the cache.


To install a strong-named assembly into the global assembly cache using the Global Assembly Cache tool (Gacutil.exe)
At the command prompt, type the following command:

gacutil –I <assembly name>

In this command, assembly name is the name of the assembly to install in the global assembly cache.

The following example installs an assembly with the file name hello.dll into the global assembly cache.

Copy Code
gacutil -i hello.dll



kissed 2008-08-28
  • 打赏
  • 举报
回复
如何写COM 啊
zbking 2008-08-28
  • 打赏
  • 举报
回复
写成COM就可以了
kissed 2008-08-28
  • 打赏
  • 举报
回复
还是不清楚
whycom 2008-08-28
  • 打赏
  • 举报
回复
另外asp要用的话,那个.net 类型还需要支持自动化
zxy_19821122 2008-08-28
  • 打赏
  • 举报
回复
关注
whycom 2008-08-28
  • 打赏
  • 举报
回复
您可以运行一个叫做程序集注册工具 (Regasm.exe) 的命令行工具来注册或注销与 COM 一起使用的程序集。Regasm.exe 会将有关类的信息添加到系统注册表中,以便 COM 客户端透明地使用 .NET 类。RegistrationServices 类提供了等效的功能。

必须先在 Windows 注册表中注册托管组件,然后才可以从 COM 客户端将其激活。下表显示 Regasm.exe 通常添加到 Windows 注册表中的注册表项。(000000 指示实际 GUID 值。)

GUID 说明 注册表项
CLSID
类标识符
HKEY_CLASSES_ROOT\CLSID\{000…000}

IID
接口标识符
HKEY_CLASSES_ROOT\Interface\{000…000}

LIBID
库标识符
HKEY_CLASSES_ROOT\TypeLib\{000…000}

ProgID
编程标识符
HKEY_CLASSES_ROOT\000…000


在 HKCR\CLSID\{0000...0000} 项下,默认值设置为类的 ProgID,并且会添加两个新的命名值:“类”值和“程序集”值。运行库将从注册表中读取“程序集”值,并将其传递给运行库程序集冲突解决程序。程序集冲突解决程序将根据程序集信息(如名称和版本号)尝试查找程序集。为便于程序集冲突解决程序查找程序集,程序集必须位于以下某一位置中:

全局程序集缓存(必须是强名称的程序集)。

在应用程序目录中。从应用程序路径加载的程序集只能通过该应用程序进行访问。

沿使用 /codebase 选项指定的、指向 Regasm.exe 的文件路径。

Regasm.exe 还会在 HKCR\CLSID\{0000...0000} 项下创建 InProcServer32 项。该键的默认值设置为初始化公共语言运行库的 DLL 的名称 (Mscoree.dll)。

检查注册表项
COM Interop 提供了标准的类工厂实现来创建任何 .NET Framework 类的实例。客户端可以通过对托管 DLL 调用 DllGetClassObject 来获取类工厂并创建对象,就像处理其他任何 COM 组件一样。

对 Mscoree.dll 的引用将替代传统的 COM 类型库,以指示公共语言运行库创建托管对象。

whycom 2008-08-28
  • 打赏
  • 举报
回复
以下有关托管类型的信息将使要将这些类型包含在其应用程序中的 COM 开发人员受益:

COM 应用程序可使用的类型的列表

有些托管类型对于 COM 不可见;有些可见但无法创建;还有些既可见又可创建。程序集可以包括不可见、可见、无法创建和可创建类型的任意组合。为了确保完整性,应确定程序集中要向 COM 公开的类型,尤其是当这些类型是要向 .NET Framework 公开的类型子集时。

有关其他信息,请参见为互用性限定 .NET 类型。

版本控制指南

实现类接口(由 COM Interop 生成的接口)的托管类会受到版本控制的限制。

有关如何使用这些类接口的指南,请参见类接口简介。

部署指南

由发行者签名并带有强名称的程序集可以安装到全局程序集缓存中。未签名的程序集必须作为专用程序集安装在用户的计算机上。

有关其他信息,请参见程序集安全注意事项。

类型库包含

大多数类型在由 COM 应用程序使用时,都需要类型库。您可以生成一个类型库或让 COM 开发人员执行此任务。.NET Framework SDK 为生成类型库提供了以下选项:

类型库导出程序

TypeLibConverter 类

程序集注册工具

.NET 服务安装工具

无论您选择哪种机制,只有在您提供的程序集中定义的公共类型才会包括在生成的类型库中。

可以将类型库包装为单独的文件或将其作为 Win32 资源文件嵌入到基于 .NET 的应用程序中。Microsoft Visual Basic 6.0 为您自动执行此任务;但是,在使用 Microsoft Visual Basic 2005 时,必须手动嵌入类型库。有关说明,请参见如何:将类型库作为 Win32 资源嵌入到基于 .NET 的应用程序中。

类型库导出程序
类型库导出程序 (Tlbexp.exe) 是一种命令行工具,它用于将包含在程序集中的类和接口转换为 COM 类型库。当类的类型信息成为可用时,COM 客户端就可以创建 .NET 类的一个实例并调用该实例的方法,就好像它是 COM 对象一样。Tlbexp.exe 将同时转换整个程序集。不能使用 Tlbexp.exe 生成程序集中定义的类型子集的类型信息。

TypeLibConverter 类
TypeLibConverter 类(位于 System.Runtime.Interop 命名空间)可将包含在程序集中的类和接口转换为 COM 类型库。此 API 与上节所述的类型库导出程序生成相同的类型信息。

TypeLibConverter class 实现 ITypeLibConverter 接口。

程序集注册工具
当应用 /tlb: 选项时,程序集注册工具 (Regasm.exe) 可生成并注册类型库。COM 客户端要求将类型库安装在 Windows 注册表中。如果不使用此选项,Regasm.exe 将只注册程序集(而不是类型库)中的类型。注册程序集中的类型和注册类型库是截然不同的活动。

.NET 服务安装工具
.NET 服务安装工具 (Regsvcs.exe) 可将托管类添加到 Windows 2000 组件服务中,并在一个工具中组合了多项任务。除了加载和注册程序集之外,Regsvcs.exe 还可以生成、注册类型库并将其安装到现有的 COM+ 1.0 应用程序中。
whycom 2008-08-28
  • 打赏
  • 举报
回复
System.Runtime.InteropServices 命名空间提供了三种类别的 Interop 特定属性:您在设计时应用的属性、COM Interop 工具和 API 在转换过程中应用的属性,以及您或 COM Interop 应用的属性。

如果您不熟悉将属性应用于托管代码这一任务,请参见利用属性扩展元数据。与其他自定义属性 (Attribute) 类似,Interop 特定的属性 (Attribute) 可以应用于类型、方法、属性 (Property)、参数、字段和其他成员。

设计时属性
利用设计时属性,可以调整 COM Interop 工具和 API 所执行的转换过程的结果。下表将说明可应用于托管源代码的属性。有时,COM Interop 工具也可能会应用下表所述的属性。

属性 说明
AutomationProxyAttribute
指定应使用自动封送拆收器还是自定义的代理和存根 (stub) 来封送类型。

ClassInterfaceAttribute
控制为类生成的接口类型。

CoClassAttribute
标识从类型库导入的初始 coclass 的 CLSID。

COM Interop 工具通常应用此属性。

ComImportAttribute
指示 coclass 或接口定义是从 COM 类型库导入的。运行库利用此标志来确定如何激活和封送类型。该属性 (Attribute) 禁止将类型导回类型库。

COM Interop 工具通常应用此属性。

ComRegisterFunctionAttribute
指示应该在注册程序集(使其可从 COM 中使用)时调用方法,以便在注册过程中执行用户编写的代码。

ComSourceInterfacesAttribute
标识作为类事件源代码的接口。

COM Interop 工具可应用此属性。

ComUnregisterFunctionAttribute
指定应该在从 COM 中注销程序集时调用方法,以便在此过程中执行用户编写的代码。

ComVisibleAttribute
使类型在属性值等于 false 时对于 COM 不可见。可以向单个类型或整个程序集应用此属性,以控制 COM 可见性。默认情况下,所有托管的公共类型都是可见的,因此不需要使用该属性来使其变为可见。

DispIdAttribute
指定方法或字段的 COM 调度标识符 (DISPID)。该属性 (Attribute) 包含它所描述的方法、字段或属性 (Property) 的 DISPID。

COM Interop 工具可应用此属性。

FieldOffsetAttribute
指示当与 StructLayoutAttribute 一起使用且将 LayoutKind 设置为 Explicit 时,每个字段在类中的物理位置。

GuidAttribute
指定类、接口或整个类型库的全局唯一标识符 (GUID)。传递给属性的字符串必须为类型 System.Guid 可接受的构造函数参数格式。

COM Interop 工具可应用此属性。

IDispatchImpAttribute
指示当向 COM 公开双重接口和调度接口时公共语言运行库使用何种 IDispatch 接口实现。

InAttribute
指示应将数据封送到调用方中。可用于表示参数的属性。

InterfaceTypeAttribute
控制如何向 COM 客户端(双重、由 IUnknown 导出或仅 IDispatch)公开托管接口。

COM Interop 工具可应用此属性。

LCIDConversionAttribute
指示非托管方法签名需要 LCID 参数。

COM Interop 工具可应用此属性。

MarshalAsAttribute
指示字段或参数中的数据应如何在托管和非托管代码之间封送。由于每种数据类型都具有默认的封送行为,所以此属性始终是可选的。

COM Interop 工具可应用此属性。

OptionalAttribute
指示参数是可选的。

COM Interop 工具可应用此属性。

OutAttribute
指示字段或参数中的数据必须从被调用的对象封送回它的调用方。

PreserveSigAttribute
防止通常在互用调用时发生的 HRESULT 或 retval 签名转换。此属性将影响封送以及类型库导出。

COM Interop 工具可应用此属性。

ProgIdAttribute
指定 .NET Framework 类的 ProgID。可用于表示类的属性。

StructLayoutAttribute
控制类的各字段的物理布局。

COM Interop 工具可应用此属性。


转换工具属性
下表将说明 COM Interop 工具在转换过程应用的属性。这些属性不在设计时应用。

属性 说明
ComAliasNameAttribute
指示参数或字段类型的 COM 别名。可用于表示参数、字段或返回值的属性。

ComConversionLossAttribute
指示从类型库向程序集导入类或接口时丢失了有关信息。

ComEventInterfaceAttribute
标识源接口和实现事件接口方法的类。

ImportedFromTypeLibAttribute
指示程序集最初是从 COM 类型库导入的。此属性包含原类型库的类型库定义。

TypeLibFuncAttribute
包含最初为此函数从 COM 类型库导入的 FUNCFLAGS。

TypeLibTypeAttribute
包含最初为此类型从 COM 类型库导入的 TYPEFLAGS。

TypeLibVarAttribute
包含最初为此变量从 COM 类型库导入的 VARFLAGS。

whycom 2008-08-28
  • 打赏
  • 举报
回复
.net 的dll 需要转化为com的才能被asp使用
如果要向 COM 应用程序公开程序集中的类型,应考虑 COM Interop 在设计时的要求。如果符合以下原则,托管类型(类、接口、结构和枚举)将与 COM 类型紧密集成:

类应显式实现接口。

虽然 COM Interop 提供了一种机制来自动生成包含类的所有成员及其基类成员的接口,但最好提供显式接口。自动生成的接口称作类接口。有关指南,请参见类接口简介。

您可以使用 Visual Basic 2005、C# 和 C++ 将接口定义合并在代码中,而不必使用接口定义语言 (IDL) 或其等效语言。有关语法的详细信息,请参见您所用语言的文档。

托管类型必须是公共的。

只有程序集中的公共类型才会注册并导出到类型库中。因此,只有公共类型才对于 COM 可见。

托管类型将向其他未向 COM 公开的托管代码公开功能。例如,参数化的构造函数、静态方法和常数字段不会向 COM 客户端公开。此外,当运行库在类型中和类型外封送数据时,可能会复制或转换数据。

方法、属性、字段和事件必须是公共的。

如果要对于 COM 可见,公共类型的成员也必须是公共的。通过应用 ComVisibleAttribute,可以限制程序集、公共类型或公共类型的公共成员的可见性。默认情况下,所有公共类型和成员都是可见的。

类型必须有一个公共默认构造函数才能从 COM 中激活。

托管的公共类型对于 COM 是可见的。但是,如果没有公共默认构造函数(无参数的构造函数),COM 客户端将无法创建该类型。如果该类型由其他方法激活,则 COM 客户端仍可使用该类型。

类型不能是抽象的。

COM 客户端和 .NET 客户端都不能创建抽象的类型。

当导出到 COM 后,托管类型的继承层次结构将被展平。在托管和非托管环境之间,版本控制也会有所不同。向 COM 公开的类型不具有与其他托管类型相同的版本控制特性。
家鸣 2008-08-28
  • 打赏
  • 举报
回复
需要封装成com组件,才能让asp调用。
kissed 2008-08-28
  • 打赏
  • 举报
回复
不是啊 是可以用的啊

111,101

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧