2012-06-12 44 views
0

我试图使用外部代码文件来为几个.ashx处理程序包含一些辅助类。例子之一是使用ListToJSON,它只是将嵌套列表(Theres像List<List<whatevers>>这些正在处理的东西)转换为JSON(它将被扔进context.response)包括代码隐藏类的ASHX -

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

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

I我也试过把这两个代码文件放到同一个命名空间中,同样的错误

它不是一个DLL文件,它只是在同一个项目中的ac#代码文件,我应该真的把它编译成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/文件夹中,它看起来很好玩。智能感知是捡东西在Helper.cs我做using Helper; 后,当我试图在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

+0

这很奇怪。尝试把它放在App_Code中,看看是否修复它。当一切都在同一个项目中时,您不必设置任何参考。 – Oliver

+0

我已经通过将我的帮助器类放入App_Code文件夹中进行了快速修复。虽然期待看到真实的答案。 – BumbleB2na

+0

是的,我认为App_Code文件夹实际上是“正确”的方式来做到这一点(假设你不想做一个预编译的DLL) – sylverfyre

回答

2

我假设你正在使用WebSite而不是WebApplication

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

编辑 - 1 =>请参阅下面的发布详情。

enter image description here

编辑= 2 =>尝试在bin文件夹添加个别Assembly如下所述。这将确认App_Code文件夹Dll已合并。

enter image description here

+0

是的。直到我专门开始使用App_Code进行搜索时,我发现了一个合适的解决方案。 解释文件夹结构的MSDN链接:http://msdn.microsoft.com/en-us/library/t990ks23.aspx – sylverfyre

+0

好的。它通过VS工作,但不是当我尝试在IIS中使用它。这是怎么回事? – sylverfyre

+0

重建完整的解决方案。在发布之前,选择“发布之前删除所有文件”选项并再次检查。 – Pankaj

0

对于IIS正确从App_Code文件夹读类,App_Code文件夹(或bin文件夹,用于编译的程序)需要在IIS根目录,以便类内被检测到。

在我的情况下,我发布到IIS根目录的子文件夹,所以IIS无法看到它的类。

+0

因此,您将文件夹保存为现有文件夹的子文件夹? – Pankaj

+0

非常。该网站在[iis root]/app/app_name /中,因此Visual Studio将App_Code文件夹放在/ app/app_name/App_Code中 - 这导致App_Code在Visual Studio的iis模拟器中正常工作(因为它将站点根放到项目中根),但当我告诉它导出到IIS它不会工作,因为App_Code是在错误的地方。 它与App_Code文件夹手动移动到IIS根文件夹正常工作。 Bin文件夹具有相同的警告 -/bin /务必位于IIS根目录中才能运行。 – sylverfyre