2014-07-24 21 views
6

stiamo migrando le nostre applicazioni Web da .NET framework 3,5-4,5errore durante la migrazione .NET framework 3,5-4,5

sulle nostre macchine di sviluppo, stiamo usando VS2012 ed eseguire Windows 7 OS

In questo processo abbiamo ottenuto il seguente errore

la classe di base include il campo 'htmlTag', ma il suo tipo (System.Web.UI.HtmlControls.HtmlGenericControl) non è compatibile con il tipo di controllo (System.Web.UI. HtmlControls.HtmlElement)

Il corrispondente HTML è

<html xmlns="http://www.w3.org/1999/xhtml" class="no-js" runat="server" id="htmlTag"> 

E il codice corrispondente è progettista (file .cs.designer)

protected global::System.Web.UI.HtmlControls.HtmlGenericControl htmlTag; 

completa dello stack trace qui ..

System.Web .HttpParseException (0x80004005): la classe base include il campo 'htmlTag', ma il suo tipo (System.Web.UI.HtmlControls.HtmlGenericControl) non è compatibile w con il tipo di controllo (System.Web.UI.HtmlControls.HtmlElement). a System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildFieldDeclaration (ControlBuilder costruttore) a System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder (ControlBuilder costruttore, booleano fInTemplate, booleano topLevelControlInTemplate, PropertyEntry PSE) al System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder (ControlBuilder builder , Boolean fInTemplate, Boolean topLevelControlInTemplate, PropertyEntry pse) su System.Web.Compilation.TemplateControlCodeDomTreeGenerator.BuildMiscClassMembers() su System.Web.Compilation.PageCodeDomTreeGenerator.BuildMiscClassMembers() su System.Web.Compilation.BaseCodeDomTreeGenerator.BuildSourceDataTree() su System.Web .Compilation.BaseCodeDomTreeGenerator.GetCodeDomTree (CodeDomProvider codeDomProvider, StringResourceBuilder stringResourceBuilder, VirtualPath virtualPath) su System.Web.Compilation.BaseTemplateBuildProvider.GenerateCode (AssemblyBuilder assemblyBuilder) su System.Web.Co mpilation.AssemblyBuilder.AddBuildProvider (BuildProvider buildProvider) su System.Web.Compilation.AssemblyBuilder.AddBuildProvider (BuildProvider buildProvider) su System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() su System.Web.Compilation.BuildProvidersCompiler.PerformBuild() su System. Web.Compilation.BuildManager.CompileWebFile (VirtualPath virtualPath) su System.Web.Compilation.BuildManager.GetVPathBuildResultInternal (VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) su System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert (Contesto HttpContext, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) su System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath virtualPath, contesto HttpContext, Booleano allowCrossApp, Boolean throwIfNotFound) su Syste m.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath (VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) in System.Web.UI.PageHandlerFactory.GetHandlerHelper (contesto HttpContext, String requestType, VirtualPath virtualPath, String physicalPath) in System.Web. HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() a System.Web.HttpApplication.ExecuteStep (passo IExecutionStep, Boolean & completato in modo sincrono) Metodo di errore: Void AddBuildProvider (System.Web.Compilation.BuildProvider) Aiuto Link:

Per risolvere questo problema abbiamo seguito i passi indicati a questo link http://support.microsoft.com/kb/941824/en-us

In sostanza abbiamo appena tagliato il codice HTML e incollarlo indietro .. e il codice progettista viene rigenerato come segue

protected global::System.Web.UI.HtmlControls.HtmlElement htmlTag; 

Questo sembra il modo logico per risolvere il problema e ha funzionato anche su poche macchine, ma la stessa soluzione ha rotto il codice su altre macchine sviluppatore e in particolare il codice distribuito anche sul nostro server di produzione. Nota, eseguiamo Windows Server 2008 R2 Datacenter sul nostro server di produzione e abbiamo .Net Framework 4.5 installato sulla macchina. Quello che segue è l'errore si ottiene dopo il cambio

La classe di base include il campo 'htmlTag' ma il suo tipo (System.Web.UI.HtmlControls.HtmlElement) non è compatibile con il tipo di controllo (sistema. Web.UI.HtmlControls.HtmlGenericControl)

Vedete il messaggio di errore è proprio di fronte al primo messaggio di errore in questo post

in quelle macchine che ora l'errore, se ci limitiamo a lasciare il tipo di controllo a HTMLGenericControl l'errore scompare

Abbiamo cercato di confrontare i service pack .NET Framework correlate sulle macchine che lavorano contro quelli che dont e abbiamo davvero non abbiamo notato nulla che potrebbe causare l'errore

Questa situazione è inaccettabile dal momento che abbiamo squadre distribuite su più località geografiche e non possiamo coordinarci con ciascuna di esse sul modo di sistemare il loro ambiente locale. Più sopra, non siamo in grado di check-in questo file con le modifiche in quanto si romperà per molte persone e rilasciando questo per la produzione sta per essere troppo difficile

la prego di aiutarci a risolvere questo problema

+0

'abbiamo Net Framework 4.5 installato sulla macchina '-> Ma l'AppPool per l'app è effettivamente configurato per usarlo? (cioè molto simile a VS in cui si sceglie un CLR da compilare rispetto a te scegliere un CLR da eseguire sul lato server). (Pool di applicazioni - Scegli quello giusto - Impostazioni di base -.Net Framework versione – tolanj

+0

In IIS la versione .Net Runtime è 4.0 –

+0

hai controllato web.config digita linee? – tolanj

risposta

2

Finalmente ho trovato la causa del problema

Got ammettere che è stato un mio errore e un imbarazzante semplice correzione

per impostazione predefinita, quando framework di destinazione per un progetto viene modificato a 4.5, aggiorna il web.config, come di seguito

<system.web> 
    <compilation debug="true" targetFramework="4.5"/> 
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/> 
</system.web> 

Per prima cosa non ci siamo resi conto che VS avrebbe modificato il web.config quando avremmo aggiornato a 4.5. In secondo luogo, il nostro Web.Config è un grosso file e, anche se viene modificata una riga, sfortunatamente mostra l'intero file come modificato. Quindi non ci prendiamo mai la briga di archiviare il file sul controllo del codice sorgente a meno che non lo cambiamo esplicitamente a mano. Di conseguenza alcune macchine avevano attributo targetFramework impostato su 4,5 mentre altri non ce l'avevano. Questo spiega il comportamento incoerente tra le macchine. Probabilmente abbiamo bisogno di formattare il web.config il modo in cui Visual Studio fa quando fa le modifiche automatiche e controllare in cnotrol fonte per evitare questo problema in futuro

saluti,

Siva

+0

Utile. Grazie. –

Problemi correlati