2012-02-08 16 views
14

sto ottenendo un FileNotFoundException su un progetto applicazione Windows Form, con il seguente messaggio:"Impossibile caricare il file o System.Drawing montaggio o una delle sue dipendenze" errore .Net 2.0, VS2010 e Windows 8

Could not load file or assembly 'System.Drawing, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 
The system cannot find the file specified. 

di replicare il problema:

  • Selezionare Nuovo, progetto, scegliere .Net Framework 2.0 come destinazione e raccogliere Applicazione Windows Form come tipo di progetto.
  • Nelle proprietà del modulo creato per impostazione predefinita, selezionare un valore per la proprietà Icona. Qualsiasi file .ico funzionerà. Questo incorporerà il file sul file resx.
  • Compilare ed eseguire l'applicazione.

Quando faccio questo, il programma si ferma sulla linea this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); con la seguente eccezione:

System.IO.FileNotFoundException was unhandled 
    Message=Could not load file or assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 
    Source=mscorlib 
    FileName=System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 

sto ottenendo questo su Visual Studio 2010 SP1, recentemente installato su Windows 8 Developer Preview. Se cambio le proprietà del progetto su .Net Framework 4, l'errore scompare.

Nel file Form1.resx, posso vedere che la versione dell'assembly System.Drawing è esplicitamente indicato come 2.0:

<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 

Tutte le idee?

+2

Si tratta di un bug in Visual Studio 2010. Le risorse di default di .Net 4.0. Se le tue risorse hanno immagini o qualsiasi cosa che usi la grafica, verrà automaticamente impostata su 4.0 indipendentemente dal target impostato. – vulkanino

+0

@vulkanino Seriamente? C'è qualche soluzione? Oltre a caricare la risorsa in modo dinamico, ovviamente. – Leonardo

+0

per favore leggi la mia risposta. – vulkanino

risposta

4

ho trovato una possibile soluzione, si prega di provare questo:

Aprire il file resx in Progettazione e impostare l'accessmodifier dal pubblico a nessuna generazione del codice.

Modifica: c'è una soluzione alternativa, ma molto fastidiosa.

  1. Aprire Modulo in Designer e apportare le modifiche necessarie alla GUI. Chiudere la finestra di progettazione e salvare
  2. Compilare il progetto e ricevere l'errore di compilazione RESX (solo i moduli con Imagelist dovrebbero avere questo problema)
  3. Fare doppio clic su resx compile error per aprire il file resx.
  4. Scorrere fino all'inizio dell'immagestream.
  5. Modificare la riga superiore del torrente Image: AAEAAAD ///// AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w PER AAEAAAD ///// AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
  6. Chiudere e salvare il file RESX e ricompilare.

** NOTA: l'unica differenza sono i personaggi alla fine "j00LjAuMC4w' a 'j0yLjAuMC4w' Questo deve essere fatto ogni volta che si apre il modulo in modalità Designer

Microsoft dice che stanno andando. per risolvere il problema nella prossima versione VS ...

Fonte:. http://connect.microsoft.com/VisualStudio/feedback/details/532584/error-when-compiling-resx-file-seems-related-to-beta2-bug-5252020

+1

È stato impostato su nessuna generazione di codice. Ho notato che il tipo di risorsa era System.Drawing, versione 4.0.0.0. Quindi ho cancellato manualmente l'icona e l'ho riaggiunta tramite l'editor, poi rinominato. Ora il tipo è System.Drawing, versione 2.0.0.0, tuttavia continuo a ricevere la stessa eccezione durante l'esecuzione dell'app. – Leonardo

+2

Non ho potuto utilizzare questa soluzione alternativa, poiché la risorsa che attiva il problema è un'icona, non parte di un flusso di immagini (la stringa base64 è diversa). Il collegamento, tuttavia, fa luce sulla radice del problema. Grazie. – Leonardo

9

Questo è un bug. L'ho visto anche io. Succede perché il tuo file .resx punta alla versione 4.0.0.0 di System.Drawing in cui uno non esiste. Per ovviare a questo problema, di solito modifica il .resx nel blocco note per cambiare la 4.0.0.0 in 2.0.0.0. Il bug viene introdotto seguendo i passaggi esatti che hai delineato.

+2

Ho aperto il file .resx su un editor di testo e tutti i riferimenti sono stati impostati correttamente su 2.0.0.0. Il caricamento della versione errata sembra avvenire in fase di esecuzione. – Leonardo

5

Questo problema può verificarsi se .net resgen anteprima 4.5 viene utilizzato per creare i file di risorse

Ho lo stesso problema sul mio laptop (Windows 7, VS2010 Premium, VS11 Developer Preview). Ho riscontrato questo problema con un semplice progetto di moduli quando dico "localizable = true" su un modulo. Nel mio caso non sono coinvolti dati di immagine. Il progetto è impostato NET 3,5

private void InitializeComponent() 
{ 
    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); 
    this.SuspendLayout(); 
    // 
    // Form1 
    // 
    resources.ApplyResources(this, "$this"); //exception Could not load file or assembly 'System.Drawing, Version=4.0.0.0, 

Se dunque io copio questo progetto a un altro computer (Windows 7, VS2010 Premium) e cercare di eseguire il debug, l'errore rimane. L'errore scompare se pulisco la soluzione (non il progetto) (o cancella bin/obj a mano) Se poi copio questa soluzione sul mio portatile, l'errore è scomparso, ma non riesco a vedere di nuovo il modulo in vista di progettazione 'Error message: at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)'

Il motivo di tutto questo sembra essere la versione .net nei file * .Designer.cs.

  1. Runtime versione: 4.0.30319.239 sul computer in cui funziona,
  2. Runtime versione: 4.0.30319.17020 sul computer portatile in cui ottengo l'eccezione.

Qualcuno può dirmi dove posso configurare quale versione di resgen viene utilizzata quando si tratta di progetti .net 3.5?

+0

Grazie per questa risposta! Ho avuto esattamente questo problema, ma è difficile per Google e difficile da diagnosticare ... –

1

Ho avuto questo problema e ho trovato stranamente a che fare con. Net 4.5 beta. Disinstallandolo e reinstallando .Net 4.0, il problema si è risolto. Non sono sicuro se c'è un modo per avere .Net 4.5 beta installato e utilizzare contemporaneamente risorse da un progetto .Net 2.0.

0

Recentemente ho ricevuto lo stesso messaggio di errore quando un cliente mi ha chiesto di eseguire il downgrade di un'applicazione.

Utilizzo di Visual Studio 2010 Professional Ho modificato il framework di destinazione da .NET Framework 4 a .NET Framework 3.5. La costruzione è fallita con il messaggio di errore specificato. La soluzione era rimuovere il file immagine che causava il problema dalle risorse dell'applicazione. Aggiungendolo di nuovo, la versione System.Drawing era elencata come 2.0.0.0 e l'edificio è riuscito.

0

Ho incontrato lo stesso problema e nessuno dei suggerimenti di cui sopra ha lavorato per me, così ho fatto la seguente:

Aperto si Progetto
Vai Esplora soluzioni
Espandere il gruppo di riferimento
Eliminare il Riferimento System.Drawing
Fare clic con il pulsante destro del mouse su Gruppo di riferimento
Aggiungi riferimento
Nella scheda ".NET", cercare Sistema.Disegno per aggiungere il riferimento corretto

1

Ho avuto lo stesso problema.

Ho riparato .net 4.5.1 e l'ho riparato.

0

Ho avuto lo stesso problema .. con il mio progetto 2.0 Framework continua a fare riferimento a 4.0 dll. Il modo in cui sono stato in grado di risolverlo ... vai semplicemente al riferimento del tuo progetto -> seleziona "Syste.Drawing" -> Proprietà e seleziona Usa versione esatta = true

Questo forzerà l'utilizzo della DLL di framework 2.0.

Spero che questo aiuti.

Saluti !!!

0

Ho anche riscontrato questo problema, e nel mio caso la causa era la creazione di due progetti sostanzialmente duplicati in parallelo, uno di destinazione .NET 2.0 e l'altro di destinazione .NET 4.0, entrambi contenenti principalmente lo stesso codice e le stesse risorse. Se il tempismo era corretto, il progetto 2.0 prelevava un file di output dal progetto 4.0 e terminava con riferimento alle librerie 4.0.

L'ho risolto costruendo i progetti in serie, facendo dipendere l'uno dall'altro.

(mi rendo conto che questo non era probabilmente la causa del problema originale come inviato da @Leonardo, ma può essere utile per i futuri visitatori che incontrano questo errore con una configurazione a doppio-progetto simile.)

Problemi correlati