2010-03-30 12 views
6

Possiedo un progetto di applicazione Web ASP.NET che fa riferimento a un altro progetto denominato ModusCore (o Modus.Core). Abbiamo avuto una varietà di controlli che utilizzano ModusCore fino ad ora senza problemi, ma ce n'è uno che ho creato ultimamente e causa problemi. Ecco il codice:Generazione del file di progettazione non riuscita: impossibile caricare il file o il gruppo

public class PortalLinkNew : WebControl 
{ 
    public string Text { get; set; } 
    public bool AllowPush { get; set; } 

    public PortalLinkNew() 
    { 
     AllowPush = true; 
    } 

    public IChannelRequest ChannelRequest { get; set; } 

    protected override HtmlTextWriterTag TagKey 
    { 
     get { return HtmlTextWriterTag.A; } 
    } 

    protected override void AddAttributesToRender(HtmlTextWriter writer) 
    { 
     try 
     { 
      base.AddAttributesToRender(writer); 
      if (DesignMode || Page == null || !(Page is IPortalPage)) 
      { 
       return; 
      } 
      string href = "/"; 
      if (ChannelRequest != null) 
      { 
       var portalPage = (IPortalPage)Page; 
       href = portalPage.Module.PortalRouter.GetLinkUrl(portalPage, ChannelRequest, AllowPush); 
      } 
      writer.AddAttribute(HtmlTextWriterAttribute.Href, href); 
     } 
     catch (Exception) 
     { 

     } 
    } 

    public override void RenderEndTag(HtmlTextWriter writer) 
    { 
     writer.Write(Text); 
     base.RenderEndTag(writer); 
    } 
} 

Nel codice precedente, IPortalPage e IChannelRequest sono interfacce definite in Modus.Core.

Il mio intento è quello di utilizzare questo controllo nel mio codice come segue:

<tnl:PortalLinkNew ID="CancelButton" runat="server" Text="Cancel" OnInit="CancelButton_Init" /> 

Questo compila realtà e funziona senza un problema, ma quando sto modificando la pagina (visualizza sorgente) in Visual Studio 2008, ottengo il seguente avviso:

generazione di file di progettazione non è riuscita: Impossibile caricare il file o l'assembly 'Modus.Core, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' o una delle sue dipendenze. Il sistema non trova il file specificato.

Come si dice, ma non rigenera il file di progettazione, che significa ogni tentativo di fare riferimento al controllo di CancelButton in code-behind si traduce in un errore di compilazione. Seguendo i consigli che ho trovato online, ho provato a cancellare il corrispondente file .ascx.designer.cs e ad usare "Converti in applicazione Web" su quella pagina, ma mi dice che non è possibile ricostruire il file del designer per la stessa ragione menzionata sopra.

Ho provato tutto quello che posso pensare: pulire la soluzione, riavviare Visual Studio, riavviare il computer, eliminare la directory del codice e recuperarla dal repository, rimuovere e riaggiungere i riferimenti di progetto e dll, ecc. Lo stesso problema si verifica su più computer che uso.

Come si può impedire al progettista VS di non riuscire?

risposta

18

Ho un problema molto simile (che non ho ancora potuto risolvere). L'applicazione con cui ho avuto il problema è stata convertita da un "Progetto sito Web" e non riesco a liberarmi della sensazione che questo abbia qualcosa a che fare con esso. E sono in VS 2005.

Ora quello che posso aggiungere è che

a) "a volte" (non riuscivo a capire quando esattamente ancora) il "Convert to Web Application" -trick funziona per me (ma non sempre)

b) "qualche volta" (come sopra) contribuisce per passare alla visualizzazione di progettazione, cambiare qualcosa e salvare -> * .designer.cs viene rigenerato

solito cerco molte cose in nessun ordine fisso dopo aver aggiunto un controllo alla mia pagina finché "qualcosa" non funziona.

C'è un sacco di rumore su questo su internet ma non sono riuscito a trovare una "soluzione reale" per questo (ancora). Una cosa che ho letto oltre a quella già menzionata è che potrebbe avere qualcosa a che fare con spazi dei nomi (non corrispondenti/non esistenti).

Quando ho controllato la mia domanda, non c'erano davvero dichiarazioni namespace nei file * .cs. Così li ho aggiunti (in * .cs e * .aspx) e per qualche tempo ho pensato che fosse il trucco. Ma purtroppo ora so che non era così ...

+5

+1 opzione (b) ha lavorato per me – roufamatic

+1

Opzione B ha funzionato per me. Grazie. – William

2

Sono stato alle prese con questo problema tutto il giorno, e non crederesti a cosa fosse il colpevole. Ho disabilitato ReSharper 5.0 e all'improvviso gli errori sono andati via. Incredibile.

+0

Hmmm, la trama si infittisce. – StriplingWarrior

+0

+1 descrive anche la mia situazione ... aggiungi un po 'di amido di mais a quella trama. – roufamatic

+0

Prova ad aprire il file .designer.cs ed elimina tutti i suoi contenuti. Chiudilo e modifica di nuovo il tuo webform/controllo - dovrebbe essere rigenerato. Ha funzionato per me. – wows

5

Aggiunta una terza opzione per quando @ di scherand (a) e (b) non riescono:

c) "A volte", questo funziona così:

  • Rimuovere le <%@ Register... %> voci
  • Salva il file .AS? ​​X. Lascia che il designer si lamenti.
  • Aggiungere il nuovo <%@ Register... %>
  • Salva nuovo

[Aggiunto Oct-13-2010]:
d) "A volte", così:

  • Cancellare la AS? Il file X non contiene tutti i contenuti di base.
  • Iniziare ad aggiungere pezzi indietro, un po 'alla volta.
  • Salva.
  • Verificare di non aver ricevuto il messaggio di errore.
  • Aggiungi altri pezzi. Risciacquare. Ripetere.

Io uso uno strumento di confronto del testo contro una copia di backup del file AS? X per questo.

Cerco di evitare di aggiungere i controlli che causano l'errore fino alla fine. Cerco anche di aggiungere dalla parte inferiore della pagina. Tuttavia, non conosco una regola difficile. È un esercizio istintivo.

(Qualcuno mai capirci qualcosa?)

+0

L'opzione C ha funzionato per me – Xorandor

0

Copiare gli assembly mancanti nella directory di Visual Studio \ Common7 \ IDE \ assemblee pubbliche mi ha dato messaggi di errore più specifiche di 'Impossibile caricare il file o il montaggio '. Da qui ho commentato alcune parti problematiche della pagina, eliminato il file .designer.cs e scelto "Converti in applicazione Web" dal menu di scelta rapida del file .ascx.

0

Bene, ho avuto questo problema per due giorni. Per quanto nessuna soluzione proposta risolva completamente il problema (sembra molto ... irregolare), ho raggiunto il pulsante Informazioni sull'assemblaggio (o qualcosa di simile ... il mio VS è in spagnolo) nella scheda Applicazione delle proprietà del progetto. Ho solo cambiato la lingua neutrale ... e ora distribuisce correttamente.

Non ho idea della correlazione, ma ho raggiunto qui dopo aver visto come alcuni errori, relativi alle informazioni sull'assembly sono stati visualizzati sulla console dopo "conversione in applicazione Web".

Per garantire la corretta implementazione dell'applicazione Web, è possibile visualizzare le prime righe dei file aspx e verificare se tutti i CodeFile sono invece CodeBehind. Se vedi "Codefile = ...", fallirà sulla macchina di distribuzione.

Ci scusiamo per non essere più esplicito, ma questo è un problema strano per me: S

13

La mia soluzione:

  1. Chiudere e riaprire Visual Studio.
  2. Il problema è stato risolto? In caso contrario, andare a 1.
+6

Il riassuntore mi dice che esiste un potenziale anello infinito nell'algoritmo. ;-) – StriplingWarrior

+0

+1 per la risposta. A proposito, la tua soluzione ha funzionato per meXD –

+1

+1 - Ha funzionato come un fascino ... VS 2010 mi ha rovinato e ho dimenticato questo trucco perché ho meno bisogno di farlo – Dimitri

0

Avevo un problema simile ma con gli assembly che avevamo creato. Nel nostro caso il numero di versione era molto specifico, quindi potrebbe non funzionare se tutti i tuoi file dicono 1.0.0.0.

Prima di tutto, eliminare il file di progettazione per il file aspx problematico. Fare clic con il pulsante destro del mouse sul file aspx e selezionare "Converti in applicazione Web", in modo simile a quello suggerito da altri. Farlo sul file è più veloce e ottieni un popup con l'errore invece di un avvertimento che devi cercare. Nel nostro caso l'errore è stato Generation of the designer file for OurPage.aspx failed: Could not load file or assembly 'OurCustomAssembly, Version=1.0.234.567...

Quello che poi ho fatto è utilizzare uno strumento che cerca il contenuto dei file (ad esempio Agent Ransack) e la puntò alla nostra cartella di origine (che ha anche i file build/cache) e cercato per i file "contenente testo "con la versione specifica. Per ognuno dei progetti che sono venuti fuori, ho rimosso il riferimento all'assembly che stava fallendo, lo ho aggiunto nuovamente, quindi ho ricostruito il singolo progetto. La ricerca di nuovo ha mostrato che la versione era sparita.

Ho eseguito di nuovo Converti in applicazione Web e ora ho ottenuto lo stesso errore ma con un file diverso. Questa volta nessuno dei precedenti ha funzionato. Sono stato in grado di determinare che solo alcuni dei tag Register erano problematici. Ho rimosso i tag di registro, creato le variabili protette sul code-behind della pagina (poiché non erano nel file di progettazione) e ho ricompilato la soluzione. Successivamente ho rimosso le variabili che avevo creato, salvato, letto tutti i tag Register, salvati. A quel punto il file designer è stato generato correttamente.

Potrebbe esserci un modo più semplice per fare tutto questo, ma è quello che ha funzionato per me. Il tempo lo dirà, ma si spera che questa sia una soluzione permanente.

0

sto usando Piattaforma ReSharper 6. ero in grado di risolvere il problema nel modo seguente:

  1. ReSharper (Barra dei menu)> Opzioni ...
  2. Ambiente> Generale > Cancella cache
  3. Riavviare Visual Studio
0

Un'altra soluzione che ho trovato per essere efficace in Visual Stu dio 2015 è di chiudere VS e quindi deselezionare le seguenti directory:

  • % UserProfile% \ AppData \ Local \ Temp file temporanei di ASP.NET \
  • % UserProfile% \ AppData \ Local \ Microsoft \ VisualStudio \ \ 14.0 \ ProjectAssemblies \

Aprire nuovamente la soluzione e selezionare Build-> Clean Solution.

Passare alla tua pagina ASPX, quindi selezionare Project-> Converti in Web Application

Problemi correlati