PresentationCore.dll e WindowsBase.dll sono entrambi inclusi con il Microsoft .NET Framework 3.0, e due versioni di ogni dll sono installati su disco:Utilizzando PresentationCore e WindowsBase DLL in entrambi i x64 e x86 ambienti
- An versione x64 in C: \ Program Files \ assembly di riferimento \ Microsoft \ Framework \ v3.0
- una versione x 86 in C: \ Program Files (x86) \ Riferimento Assemblies \ Microsoft \ Framework \ v3.0
Fino all'aggiunta di riferimenti a queste DLL, la nostra app Web ASP.NET è stata in grado di essere compilato per "qualsiasi CPU" e funzionerebbe in modalità a 32 o 64 bit senza problemi. Dopo aver aggiunto un riferimento, per esempio, PresentationCore tramite lo standard "Add Reference" finestra di dialogo (Aggiungi riferimento -> NET -> PresentationCore), la web app non riesce quando è in modalità a 64 bit con il seguente errore:
Could not load file or assembly 'PresentationCore' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Chiaramente questo perché il pool di applicazioni a 64 bit sta tentando, e in mancanza, di caricare una versione a 32 bit della dll di PresentationCore.
Ora, io sono un po 'confuso da questo ...
- altre DLL .NET Framework sembrano passare tra loro x64 e la versione x86 senza soluzione di continuità (caricamento da Microsoft.NET/Framework64 o Microsoft.NET/Framework, rispettivamente). Perché PresentationCore e WindowsBase sono diversi?
- Perché Visual Studio sembra offrirmi solo la versione a 32 bit nella scheda ".NET" nella finestra di dialogo "Aggiungi riferimento"? Se voglio la versione a 64 bit, devo "Sfoglia" per questo.
- C'è un modo semplice per avere automaticamente la DLL corretta selezionata, come sembra accadere per altre librerie .NET Framework?
Possiamo sempre scrivere un po 'di MSBuild xml che scambiare automaticamente i riferimenti al tempo di costruzione in base al numero di bit dell'ambiente di destinazione, ma che sembra come qualcosa che non dovremmo avere a che fare per la DLL .NET Framework. Cosa dà?
Grazie!
Sei sicuro di non aver aggiunto il riferimento utilizzando Sfoglia? Hai provato a rimuoverlo e quindi aggiungere di nuovo? – svick
Sì, piuttosto sicuro. E sì, abbiamo provato a rimuoverlo e ri-aggiungerlo più volte. –
Ho risolto questo problema abilitando "Abilita applicazioni a 32 bit" nelle impostazioni avanzate del pool di applicazioni. – Nippysaurus