我使用C#创建一个dll在VS2008。 它是使用.NET Framework 2.0编译。 该项目是使用Visual C#/ Windows下的类库模板创建。 我不知道,如果该事项,但我试图使用经典的ASP和asp.net应用程序生成的DLL不是一个桌面应用程序。
这是通过利用现有传统ASP VBScript代码,在C#重写它创建。 我不是很有经验的创建的dll所以有很多还需要学习。 我一直在寻找在创造这个DLL的所有形式的帮助网页。
以下是我迄今所做的。
顶层类设置是这样的:
using System.Runtime.InteropServices;
using System.EnterpriseServices;
using System;
using System.Text;
using System.Web;
[assembly: ApplicationName("WebFramework")]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationAccessControl(false,
AccessChecksLevel = AccessChecksLevelOption.ApplicationComponent)]
namespace WebFramework
{
[GuidAttribute("AACB678E-2C54-450A-873D-77A5A15BA0E5")]
public class Framework : ServicedComponent
{
//Blah
}
}
其他类项目是公开的,他们都从类框架继承。 我并没有包括这些类的GuidAttribute指令,因为我不知道这是否是必要。 我确实需要他们接触,因为我会从我的经典ASP / asp.net应用程序中引用它们。
我编译我的代码后,我复制了三个文件; Inter.Scripting.dll,WebFramework.dll和WebFramework.pdb到Web服务器。
Web服务器是Windows 2008 R2中包含安装IIS 7.5。
在服务器的命令提示符下,我跑了regsvcs程序,并安装了这个组件,并与出任何问题,注册的dll。 在命令窗口是这样的:
E:\inetpub\wwwroot\web\WebFramework>"C:\Windows\Microsoft.NET\Framework\v4.0.30319/regsvcs.exe" /appname:WebFramework /tlb:WebFramework.tlb WebFramework.dll
Microsoft (R) .NET Framework Services Installation Utility Version 4.0.30319.17929 Copyright (C) Microsoft Corporation. All rights reserved.
Installed Assembly:
Assembly: E:\inetpub\wwwroot\web\WebFramework\WebFramework.dll
Application: WebFramework
TypeLib: E:\inetpub\wwwroot\web\WebFramework\WebFramework.tlb
我检查了组件服务应用程序,并有下COM +应用WebFramework对象。 我也跑regedit并搜索“WebFramework”,它发现我的电脑\ HKEY_CLASSES_ROOT \ WebFramework下应用..
到目前为止,我觉得一切是正确的....或者是什么呢?
当我运行一个测试传统的ASP页面,下面的代码,我得到错误424 -必需对象 。
<html>
<head>
<title></title>
</head>
<body>
<script type="text/vbscript">
On Error Resume Next
Dim WebFrame
Set WebFrame = Server.CreateObject("WebFramework.Framework")
Document.Write("<hr>")
Document.Write(Err.Number)
Document.Write(" - ")
Document.Write(Err.Description)
Document.Write("<br><hr>")
</script>
</body>
</html>
我在想什么? 为什么不能在ASP页面查找DLL?
[编辑]我忘了提一两件事。 在生成选项卡上的项目属性页中存在一个注册为COM Interop复选框。 我曾尝试编译具有这个选项选中和未选中它并没有区别。