Problema di build su Vs.2010 con windows 7 64 bit

martedì 03 agosto 2010 - 13.59
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Windows 7  |  Visual Studio 2010  |  MySQL 5.1

Lanello Profilo | Senior Member

Ciao a tutti,

premetto che il progetto in questione è nato in .Net framework 2 con Vb.2005 e dopo essere passato al 2008 adesso lo sto cercando di migrare a 2010, sono un'attimo in difficoltà in quanto il tutto funziona su una macchina con windows 7 professional 64bit ma con il visual studio 2008; il progetto ha dei componenti che sono in un'altro progetto all'interno della stessa soluzione ed ovviamente c'è il riferimento fra i due.

dopo aver installato visual studio 2010 ho importato il progetto e corretto alcuni warning che mi apparivano, il progetto adesso prima di fare il build è pulito e non presenta ne Errors (ovviamente), nè tantomeno Warnings.

se faccio il build del progetto che contiene i componenti il risultato è un bel "Build succeded", quando vado a fare il build della soluzione, mi appare un'errore nel caricamento della libreria .dll del componente che riporta il messaggio:

"Tentativo di caricare un programma con un formato non corretto. Riga xxx, posizione y"

nella finestra "Error List" il problema è che l'errore punta ad un file .resx delle risorse della form principale alla determinata riga xxx e posizione y, facendo doppio clic sull'errore vengo mandato alla riga e posizione di questo file xml che riporta le risorse (testo, grafica, audio, ecc...) del form contenuto nel progetto principale!

in poche parole, il punto dove vengo mandato facendo doppio clic sull'errore non c'entra proprio nulla con la dll che dice di non poter caricare, visto anche il fatto che NESSUNO dei componenti di quella dll è utilizzato in quel form.

sto uscendo di testa, ho provato anche a formattare il pc casomai fosse stata una incompatibilità tra l'ambiente 2008 ed il 2010 installati in contemporanea... ma nessun cambiamento.

ps: l'ho già scritto ma lo ripeto, sia il progetto principale che il progetto con i componenti personalizzati che la soluzione sono impostati per essere compilati in x86 e non a 64bit.

help
----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .it fate voi :P

kataklisma Profilo | Senior Member

>Ciao a tutti,

Ciao!

>ps: l'ho già scritto ma lo ripeto, sia il progetto principale
>che il progetto con i componenti personalizzati che la soluzione
>sono impostati per essere compilati in x86 e non a 64bit.

Dovresti provare a settare il platform target dei progetti a cui si riferisce l'errore ad "Any Cpu".

Prova e fammi sapere....

Ciao!
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

Revan1985 Profilo | Junior Member

sei sicuro che la dll che tenti di caricare sia x86?
mi era capitata una cosa simile con una x64 in un programma x86 (ci ho perso 1 giornata di lavoro per quel problema idiota)

Non c'è emozione; c'è pace.
Non c'è ignoranza; c'è conoscenza.
Non c'è inquietudine; c'è serenità.
Non c'è caos; c'è armonia.
Non c'è morte; c'è la Forza.

Lanello Profilo | Senior Member

Allora, abbiamo risolto il problema e abbiamo scoperto che è causato da un BUG del VS2010 presente già dalla versione Beta2, ci sono dei workaround ma nessuna patch per correggere il problema.

è anche vero che il caso è particolare, ma secondo me neanche troppo...

sembra succedere SOLO se si fa il porting di un progetto VS2008 a 32 bit su VS2010 su una macchina con windows 7 64 bit, il bug consiste che se anche tutti i progetti della soluzione sono impostati (causa dipendenza da librerie 32bit) in compilazione x86, il file di compilazione delle risorse .resx tale ResGen.exe effettui SEMPRE la compilazione a 64 bit, ed alla fine quando la compilazione della soluzione va a generare l'exe risultante non riesce ad inglobare nel pacchetto finale il file a 64 bit visto che tutti i progetti sono a 32.

Praticamente, per sistemare questo problema:

avviare “Visual Studio Command Prompt” ed eseguire quanto segue:

cd “%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\Bin”

Corflags /32Bit+ /Force ResGen.exe

Poi aggiungere, in ogni file .proj presente nella soluzione (quindi per ogni progetto) quanto segue dopo <propertygroup>
<resgentoolarchitecture>Managed32Bit</resgentoolarchitecture>

Nota: Nel caso sia necessario compilare progetti a 64bit è necessario rimuovere questo fix.

[soluzione tratta da Workaround 2 del seguente url:]
http://blogs.msdn.com/b/visualstudio/archive/2010/06/19/resgen-exe-error-an-attempt-was-made-to-load-a-program-with-an-incorrect-format.aspx




la "menata" come ho scritto sopra è il fatto che se dallo stesso VS2010 vuoi manutenere 2 progetti, di cui il primo importato con il bug descritto e l'altro puro 64bit fatto nuovo da vs2010 ogni volta che vai a compilare devi rimuovere il fix sul file ResGen.exe

bah... spero sia utile ad altri noi con il nostro team siamo ammattiti un bel pò

----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .it fate voi :P

notemplate Profilo | Newbie

Ciao Lanello,

a me serve la tua soluzione perché ho lo stesso problema ma non son riuscita a risolvere! Ti spiego:

Ho installato Visual Studio 2010 su un pc con Windows 7. Ho creato un nuovo progetto col framework 3.5. E fin qui tutto ok...
Ieri ho inserito un database access e da allora mi appare l'errore:
Il provider 'Microsoft.Jet.OLEDB.4.0' non è registrato nel computer locale.
Ho letto in giro nei forum che dovrei far andare il provider a 32 bit anziché a 64, selezionando una nuova piattaforma 'x86' anziché la 'anycpu' sotto Compila --> Gestione configurazione --> Piattaforma soluzione attiva --> Nuova...ma nella tendina non ho altre possibilità di scelta, ho solo 'anycpu'.

Ho poi trovato la tua risposta, alla digitazione nel prompt dei comandi di ciò che hai scritto, leggo: corflags Warning CF011: The specific file is strong name signed. Using /Force will invalidate the signature of this image and will require the assembly to be resigned.

Dopodiché, ho cercato i file di progetto, ma non ho capisco nello specifico dove trovare la sezione <propertygroup>.

Spero in una tua risposta.

Grazie

marco.santilli Profilo | Junior Member

Sei riuscito a risolvere il problema?

Io sono nelle tue stesse condizioni..
Ho solo ANY CPU e non riesco ad attivare la piattaforma x86

Fammi sapere

Ciao e grazie

Mastericarus333 Profilo | Newbie

>Ciao Lanello,
>
>a me serve la tua soluzione perché ho lo stesso problema ma non
>son riuscita a risolvere! Ti spiego:
>
>Ho installato Visual Studio 2010 su un pc con Windows 7. Ho creato
>un nuovo progetto col framework 3.5. E fin qui tutto ok...
>Ieri ho inserito un database access e da allora mi appare l'errore:
>Il provider 'Microsoft.Jet.OLEDB.4.0' non è registrato nel computer
>locale.
>Ho letto in giro nei forum che dovrei far andare il provider
>a 32 bit anziché a 64, selezionando una nuova piattaforma 'x86'
>anziché la 'anycpu' sotto Compila --> Gestione configurazione
>--> Piattaforma soluzione attiva --> Nuova...ma nella tendina
>non ho altre possibilità di scelta, ho solo 'anycpu'.
>
>Ho poi trovato la tua risposta, alla digitazione nel prompt dei
>comandi di ciò che hai scritto, leggo: corflags Warning CF011:
>The specific file is strong name signed. Using /Force will invalidate
>the signature of this image and will require the assembly to
>be resigned.
>
>Dopodiché, ho cercato i file di progetto, ma non ho capisco nello
>specifico dove trovare la sezione <propertygroup>.
>
>Spero in una tua risposta.
>
>Grazie
>

io ho risolto installando Accessdatabaseengine 2007 e 2010 (sia x86 che x64) e l'errore non mi appare + (anche con applicazione eseguita e compilata a 64 bit)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5