2009-12-15 4 views
10

ich MVC .NET mit CSLA in einer verteilten Umgebung verwenden und ich kann Referenz HttpPostedFileBase von einem meiner Web-Schichten (zB Website.MVC), aber ich kann nicht Referenz HttpPostedFileBase von a separate Schicht (lasst es OtherLayer.Web nennen).C# - Ich kann nicht Referenz HttpPostedFileBase

Haben Sie eine Idee, was ich tun muss, um HttpPostedFileBase aufrufen zu können? Ich kann HttpPostedFile in beiden Schichten verwenden - sollte ich das stattdessen verwenden?

Die Montage Referenzen sind grundsätzlich die gleichen - in Website.MVC ich habe:

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; 

Während in meiner anderen Schicht i haben:

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; 

Antwort

26

Stellen Sie sicher, Ihr Projekt die System.Web.Abstractions Assembly verweist die enthält den HttpPostedFileBase Typ.

So verwirrend es auch scheinen mag, der Typ HttpPostedFile lebt in einer separaten Baugruppe (System.Web), aber derselbe exakte Namensraum.

Es ist wichtig zu beachten, dass die Namespaces Assemblies umfassen können und der Name einer Assembly nicht unbedingt den Namespace der darin enthaltenen Typen vorgibt. Es gibt keine System.Web.AbstractionsNamespace einfach zwei Assemblys, die Typen im Namespace System.Web enthalten.

Sobald Sie beiden Baugruppen referenziert Sie beiden Arten durch ihre unqualifizierten Namen mit dieser einzigen Anweisung using verweisen können:

using System.Web; 
+0

Aus irgendeinem Grund, den ich nicht System.Web.Abstractions verweisen kann - ich den Fehler: Fehler Der Typ oder Namespace-Name ‚Abstraktionen‘ existiert nicht im Namensraum ‚System.Web‘ (möglicherweise fehlt ein Assembly Referenz?) – Teddy

+0

Hallo Teddy, meine Antwort auf Ihren Kommentar war zu lang, also habe ich oben meinen Beitrag aktualisiert :) –

+0

Ok, mein Kollege von mir hat das herausgefunden - ich musste nur den Verweis auf System.Web.Abstractions hinzufügen in anderemLayer.Web. Ich kann jetzt auf HttpPostedFileBase verweisen. Danke für die Hilfe! – Teddy

0

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

Danke, Andrew Hare, dass der Trick, aber ich glaube, dass aus .Net 4.0 und so weiter, System.Web.Abstractions ist veraltet, und Sie sollten stattdessen einen Verweis auf System.web hinzufügen.

In meinem Fall war, dass die ultimative Lösung, danach

using System.Web; 

gearbeitet, und deshalb wurde HttpPostedFileBase anerkannt.

Danke.