2012-06-12 2 views
0

Я пытаюсь использовать внешний файл кода для включения некоторых вспомогательных классов для нескольких обработчиков .ashx. В примере один использует ListToJSON, который просто превращает вложенные списки (материал Theres вроде List<List<whatevers>>, которые обрабатываются) в JSON (который будет передан в context.response)ASHX, включая класс кода -

Класс ListToJSON отлично работает, когда он находится в том же файле , Я пытаюсь помещать его в файл Helper.cs, который включен в тот же проект в VS2010, потому что эти классы используются в нескольких разных обработчиках.

У меня создалось впечатление, что «использование помощника»; было то, что мне нужно было сделать, но я до сих пор получаю сообщение об ошибке «Не удалось найти помощник по типу или пространству имен (вы не указали ссылку или ссылку на сборку?» (и intellisense тоже не видит)

I 've также попытался поместить оба файла кода в одно и то же пространство имен. Такая же ошибка.

Это не DLL-файл, это просто файл с кодом # # в том же проекте. Должен ли я скомпилировать его как 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 
    } 
} 

UPDATE: Итак, я поместил Helper.cs в папку /App_Code/, и это, казалось, играло красиво. Intellisense собирали вещи в 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 

Я не получает ошибок при выполнении этого через эмулятор IIS из Visual Studio. Когда я запускаю его через IIS (localhost), я получаю ошибку внутреннего сервера IIS. папку App_Code была сделана через VS, я сразу же нажал и выбрал Add ASP.NET Folder > App Code \

Edit: Добавлен тег iis

+0

Это довольно странно. Попробуйте поместить его в App_Code и посмотреть, исправляет ли он это. Вам не нужно устанавливать какие-либо ссылки, когда все в одном проекте. – Oliver

+0

Я использовал быстрое исправление, поместив мой вспомогательный класс в папку App_Code. Однако мы надеемся увидеть реальный ответ. – BumbleB2na

+0

Да, я думаю, что папка App_Code на самом деле является «правильной» способ сделать это (если вы не хотите делать предварительно скомпилированную dll) – sylverfyre

ответ

2

Я предполагаю, что вы используете WebSite и не WebApplication.

При добавлении нового Class файла в Website, он должен находиться в папке App_Code избежать Accessibility вопросов.

Редактировать - 1 => См. Ниже информацию о публикации.

enter image description here

Edit = 2 => Попробуйте добавить отдельные Assembly в папке бин, как указано ниже.Это подтвердит, что введена папка App_CodeDll.

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 (или папка бин, для скомпилированных сборок) должна находиться в корневом каталоге IIS для того, чтобы классы внутри, чтобы быть обнаруженными.

В моем случае я публиковал в подпапку корневого каталога IIS и поэтому IIS не мог видеть в нем классы.

+0

Итак, вы сохранили папку в качестве подпапки существующей папки? – Pankaj

+0

В значительной степени. Веб-сайт был в [iis root]/app/app_name /, и поэтому визуальная студия помещала папку App_Code в/app/app_name/App_Code - это привело к тому, что App_Code отлично работал в iIS-эмуляторе visual studio (так как он помещает корень сайта в проект root), но когда я сказал ему экспортировать в IIS, это не сработает, потому что App_Code оказался не в том месте. Он корректно работает с папкой App_Code, перемещенной вручную в папку корневого каталога IIS. папка Bin имеет одинаковую оговорку -/bin/ДОЛЖНА находиться в корневом каталоге IIS для работы. – sylverfyre

Смежные вопросы