2009-12-15 57 views
10

estoy usando MVC .NET en un entorno distribuido con CSLA y yo puede referencia HttpPostedFileBase de uno de mis capas web (por ejemplo Website.MVC), pero no puede referencia HttpPostedFileBase de una capa separada (vamos a llamarlo OtherLayer.Web).C# - No puedo hacer referencia a HttpPostedFileBase

¿Alguna idea de lo que necesito hacer para poder llamar a HttpPostedFileBase? Puedo usar HttpPostedFile en ambas capas, ¿debería usar esto en su lugar?

Las referencias de ensamblado son básicamente los mismos - en Website.MVC tengo:

namespace Website.Mvc.Controllers 
{ 
    using System; 
    using System.Collections; 
    using System.Collections.Generic; 
    using System.Web.Mvc; 
    using System.Web; 
    using System.IO; 
    using PetOrganizer.Mvc.Helpers; 
    using TrupanionPetInsurance.Web; 

Mientras que en mi otra capa que tengo:

namespace OtherLayer.Web 
{ 
    using System; 
    using System.Collections; 
    using System.Collections.Generic; 
    using System.Collections.Specialized; 
    using System.Data; 
    using System.Data.SqlClient; 
    using System.IO; 
    using System.Net.Mail; 
    using System.Text; 
    using System.Text.RegularExpressions; 
    using System.Web; 
    using System.Web.Mvc; 
    using System.Web.Security; 
    using System.Xml; 
    using System.Xml.Serialization; 
    using Csla; 
    using iTextSharp.text; 
    using iTextSharp.text.pdf; 
    using TruDat.BusinessLayer; 
    using TruDat.BusinessLayer.Billing; 
    using TruDat.BusinessLayer.Data; 
    using TruDat.BusinessLayer.Utility; 
    using TrupanionPetInsurance.Web.EmailTemplateParser; 
    using TruDat.BusinessLayer.DataServices; 

Respuesta

26

Asegúrese de que el proyecto hace referencia a la asamblea la que System.Web.Abstractions contiene el tipo HttpPostedFileBase.

Por confuso que parezca, el tipo HttpPostedFile vive en un ensamblaje separado (System.Web) pero el mismo espacio de nombres exacto.

Es importante recordar que los espacios de nombres pueden abarcar ensamblajes y que el nombre de un ensamblaje no necesariamente dicta el espacio de nombres de los tipos que contiene. No hay System.Web.Abstractionsespacio de nombres simplemente dos ensamblados que contienen tipos en el espacio de nombres System.Web.

Una vez que haya referenciado ambos conjuntos se puede hacer referencia a ambos tipos por sus nombres no calificados con esta sola instrucción using:

using System.Web; 
+0

Por alguna razón no puedo hacer referencia a System.Web.Abstractions - Me sale el error: Error El tipo o espacio de nombre no existe '' abstracciones en el espacio de nombres 'System.Web' (¿falta una ¿Referencia de montaje?) – Teddy

+0

Hola Teddy, mi respuesta a tu comentario fue demasiado larga, así que actualicé mi publicación anterior en su lugar :) –

+0

Ok, mi compañero de trabajo descubrió esto - Solo tuve que agregar la referencia a System.Web.Abstractions en OtherLayer.Web. Puedo hacer referencia a HttpPostedFileBase ahora. ¡Gracias por la ayuda! – Teddy

0

Make sure your project references the System.Web.Abstractions assembly which contains the HttpPostedFileBase type.

Gracias, Andrew Hare, que resolvieron el problema, sin embargo, creo que a partir de .Net 4.0 y demás, System.Web.Abstractions está en desuso, y en su lugar debería agregar una referencia a System.web.

En mi caso, esa fue la última solución, después de eso

using System.Web; 

trabajado, y por lo tanto, HttpPostedFileBase fue reconocido.

Gracias.

Cuestiones relacionadas