Sto cercando di includere file di rasoio (cshtml) in una libreria di classi, da includere in un progetto MVC4 separato. Ho ottenuto tutto funzionante, tranne che l'intellisense sembra mancare per alcuni tipi, in particolare System.Web.Helpers.Json
, anche se potrebbero essercene altri che non ho ancora scoperto. Il mio problema potrebbe essere correlato a Razor views: Intellisense not working with C# 3 for class libraries ma non è esattamente lo stesso. Ecco un esempio dal mio punto di vista rasoio:Razor nella libreria di classi, intellisense mancante
@model dynamic
@{
// ... some code ...
var options = new global::System.Web.Mvc.SelectListItem[]
{
new global::System.Web.Mvc.SelectListItem()
{
Text = "No",
Value = global::System.Web.Helpers.Json.Encode(false)
},
new global::System.Web.Mvc.SelectListItem()
{
Text = "Yes",
Value = global::System.Web.Helpers.Json.Encode(true)
}
};
}
@(global::System.Web.Mvc.Html.SelectExtensions.DropDownList(this.Html, string.Empty, options))
Quando inizialmente ho aperto un file rasoio, vedrò diversi avvertimenti diversi tipi di errori:
- Il tipo o il nome dello spazio dei nomi 'dinamica' non poteva essere trovata (che le manca un riferimento montaggio?)
- Caratteristica 'implicitamente tipizzato variabile locale' non può essere utilizzato perché non è parte del C specifica ISO-2 # lingua
- Caratteristica 'oggetto initializ er' non può essere utilizzato perché non è parte ...
- Il tipo o dello spazio dei nomi il nome 'JSON' non esiste nello spazio dei nomi ' System.Web.Helpers'(che le manca un riferimento all'assembly?)
I primi due errori di tre tipi scompaiono quando si crea il progetto, ma l'ultimo persisterà. L'intellisense appare quando digito System.Web.Helpers.
contiene solo Antiforgery
, UnvalidatedRequestValues
e Validation
. Quando digito lo stesso codice in un file .cs, vedo Json
e tutte le altre opzioni che mi aspetto di vedere. E quando copio questi file nel mio vero progetto MVC, non mostra errori nell'editor e gira bene.
Ecco il file web.config ho aggiunto al mio progetto per farlo funzionare fino a questo punto:
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.Helpers" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.web>
<compilation targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
Come faccio ad avere intellisense a riconoscere questa classe?