ASHX包括代码隐藏类 -

时间:2012-06-12 16:24:04

标签: c# asp.net iis code-behind ashx

我正在尝试使用外部代码文件为几个.ashx处理程序包含一些帮助程序类。示例一是使用ListToJSON,它只是将嵌套的Lists(正在使用的像List<List<whatevers>>这样的东西)转换为JSON(它将被抛入context.response)

当ListToJSON类在同一个文件中时,它可以正常工作。我试图把它放到一个Helper.cs文件中,该文件包含在VS2010的同一个项目中,因为这些类在几个不同的处理程序中使用。

我的印象是“使用助手;”是我需要做的,但我仍然得到错误“无法找到类型或命名空间帮助器(你错过了指令或程序集引用吗?” (并且intellisense也没有看到它)

我也尝试将两个代码文件放在同一个命名空间中。同样的错误。

它不是DLL文件,它只是同一项目中的c#代码文件。我真的应该将它编译为DLL来执行此操作吗?如果是这样,我该怎么做? (一旦我这样做,我可以点击右键 - >添加引用,对吗?)

我想我应该使用App_Code文件夹,但我不确定如何在VS中设置它以便正确引用它。

我的处理程序文件(骨架)

<%@ WebHandler Language="C#" Class="generateReport" %>

using System;
using System.Web;
using System.Configuration;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Diagnostics;
using Helper;
public class generateReport : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        ListToJSON Converter = new ListToJSON();
        //context.Response stuff goes here.
    }
}

我的帮助文件Helper.cs - 它位于同一项目目录中并包含在项目中:

using <stuff>;
namespace Helper
{
    public class ListToJSON
    {
        //class definition here
    }
}

更新: 因此,我将Helper.cs放入/App_Code/文件夹,它似乎播放得很好。在我完成using Helper;之后,Intellisense正在Helper.cs中找到东西 当我在IIS上尝试它时,我得到了以下熟悉的错误:

Compiler Error Message: CS0246: The type or namespace name 'Helper' could not be found (are you missing a using directive or an assembly reference?)
Line 19: using Helper;
Source File: <path>\info.ashx    Line: 19

通过visual studio的IIS模拟器运行时没有错误。当我通过IIS(localhost)运行它时,我得到了描述的IIS内部服务器错误。 App_Code文件夹是通过VS制作的,我右键单击并选择了Add ASP.NET Folder > App Code \

修改:添加了标记iis

2 个答案:

答案 0 :(得分:2)

我假设您使用的是WebSite而不是WebApplication

Class中添加新的Website文件时,应该在App_Code文件夹中以避免Accessibility问题。

编辑 - 1 =&gt;请参阅下面的发布详细信息。

enter image description here

编辑= 2 =&gt;尝试在bin文件夹中添加单个Assembly,如下所述。这将确认App_Code文件夹Dll已合并。

enter image description here

答案 1 :(得分:0)

要使IIS从App_Code文件夹中正确读取类,App_Code文件夹(或bin文件夹,对于已编译的程序集)需要位于IIS根目录中,以便检测其中的类。

在我的情况下,我发布到IIS根目录的子文件夹,因此IIS无法看到其中的类。