【问题标题】:VS 08 Express to Classic ASPVS 08 Express 到经典 ASP
【发布时间】:2013-08-01 13:21:20
【问题描述】:

情况如下:

我们为我们的网站运行了经典的 ASP。 我们有 VB6 DLL,在 ASP 中作为 COM 对象运行。

我已经迁移到 Visual Studio 2008。我正在尝试创建可以在 ASP 中使用的 DLL,就像使用 VB6 一样(Server.CreateObject(""))。不幸的是,虽然注册成功,但我得到了: “在检查权限时调用 Server.CreateObject 失败。对此对象的访问被拒绝。”错误。

我进行了大量研究,发现您必须使用“regasm”注册 VB.NET DLL(我这样做了),您还需要勾选相应的(“使程序集 COM-Visible”)框。

但是,经过我所有的努力,似乎我的运气已经用完了。 为了在 VB.NET 中创建 COM DLL,我确实阅读了一些关于使用名为“COM 类”的类模板的内容,但我在模板选择中没有该选项。

所以我的问题是,我要不要换成visual studio(非express来获取COM类模板,如果是的话,那肯定行吗?)

有什么我做的不对吗?

请注意,迁移到 ASP.NET 不是一种选择,也不是在 VB6 中编程。

谢谢!

编辑

经过大约一整周的搜索,我找到了答案,任何找到此页面的人:http://social.msdn.microsoft.com/Forums/en-US/9f84bdf7-aace-4a57-a3e4-3863a0efb647/how-to-create-comvisible-dll-that-i-can-use-from-vba-using-vs-express-2008-beta-2

【问题讨论】:

    标签: vb.net visual-studio-2008 asp-classic


    【解决方案1】:

    你必须阅读很多关于 .net 的内容。

    你不能只写一个 .net dll 然后在经典的 asp 中使用它。这是两种完全不同的技术。

    它与 Visual Studio 完全无关。 Visual Studio 只是开发环境,与您的 .net 框架或 Web 应用程序完全无关。您不能使用 Visual Studio > 版本 6 进行 vb6 编程。因此您无法使用 Visual Studio 2008n 或 2010 或 2003 或 2005 创建 vb6 dll。

    您可以编写 .net dll 并在经典的 asp 或任何其他 com 感知技术中使用它们。但它们仍然是需要 .net 框架的 .net dll。它们只是可见的。

    这有点复杂但可能: 您的类和方法必须是“com 可见的”,您可以通过使用属性 [ComVisibleAttribute( true )] 来实现这一点 就在你的类的声明之前和你想要公开的每个方法之前。 示例:

    [ComVisibleAttribute( true )]
    public class Helper {
        public Helper() {
        }
    
        [ComVisibleAttribute( true )]
        public object parseDate( string strDate ) {
            return (object)DateTime.Parse( strDate ).ToString( "dd.MM.yyyy HH:mm:ss" );
        }
    }
    

    你必须为你的类使用一个 emtpy 构造函数!

    此外,您必须在项目属性中检查“Assemlby Com visible”-> 程序集信息 或打开 Properties/AssemblyInfo.cs 并添加这些行:

    [assembly: ComVisible( true )]
    [assembly: Guid( "e2e1670d-1f90-4948-98be-27cc820b4675" )]
    

    构建 dll 后,您必须使用 ragasm.exe 在注册表中注册 .net dll。 (正常的 .net dll 默认是注册表中的注释寄存器。

    你可以这样做:

    %windir%\Microsoft.NET\Framework\v4.0.30319\regasm.exe path/and/Name/of/your.dll /codebase
    

    你必须确保你想要的 .net 框架的路径是正确的。

    之后,您必须重新启动 iis,然后才能使用经典 asp 中的 .net dll 方法。

    请注意,您只能将简单数据类型的值传递和返回到您的 .net 方法,从/到经典 asp,如字符串、int 等。

    【讨论】:

    • 好的,所以,我已经尝试过我说过的那些事情(我再次尝试过,以防万一)。我也在使用 VB 而不是 C。我想也许你应该重新阅读我所说的。我没有说 Visual Studio 只是一个开发环境。我在问普通的 Visual Studio 附带的模板“COM 类”而不是 VS express 是否是我无法使用 dll 的原因。
    【解决方案2】:

    答案:

    http://social.msdn.microsoft.com/Forums/en-US/9f84bdf7-aace-4a57-a3e4-3863a0efb647/how-to-create-comvisible-dll-that-i-can-use-from-vba-using-vs-express-2008-beta-2

    1. 构建 .dll,并以 .NET Framework 3.5 为目标,使其 COM 可见。

    2. 使用随 Visual Studio 2008 Beta 2(因此 >.NET Framework 3.5)安装的 GAC 实用程序 - 它位于 C:\Program FIles\Microsoft SDKs\Windows\V.0A\bin 中 - 放置 .生成的 .dll 到 GAC 中

    3. 使用我在 c:\Windows\Microsoft.NET\framework\V2.0.50727 中找到的 regsam.exe 文件 >注册生成的 .dll。

    4. 使用我在 C:\Program FIles\Microsoft SDKs\Windows\V.0A\bin 中找到的 tlbexp.exe 文件 >.export a .tlb 文件

    5. 在 VBA IDE 中,使用 Tools->References 浏览到 .tlb 文件并选择它作为 >addtional reference。

    问题是我没有执行第 2 步或第 4 步。 我希望这对将来的某人有所帮助,因为我花了很长时间才解决。

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 2011-05-30
      • 2015-08-20
      • 1970-01-01
      相关资源
      最近更新 更多