Domanda

Abbiamo diversi progetti che utilizzano p4.net , una DLL gestita , che a sua volta dipende p4dn.dll, a 32 bit DLL non gestita. Questo ha problemi su sistemi x64, così ho dovuto andare ad ogni progetto che utilizza p4.net e impostarne il tipo di processore a 86.

Se ho capito il problema giusto, è che quando .NET carica un exe, si verifica la presenza di un manifesto e se nessuno lo fa tutto ciò che è meglio per il tipo di processore. Poi, quando si corre in DLL a 32 bit, barfs.

posso andare ad ogni progetto che utilizza p4.net e segnare come a 32-bit. Ma noi abbiamo un bel po 'di questi. Inoltre, le persone stanno andando a continuare a farne di nuovi e dimenticare di impostare a 32 bit e quindi in futuro avremo ancora questo problema quando qualcun altro tenta di utilizzarlo su x64.

C'è un modo per avere .NET caricare automaticamente qualsiasi applicazione che utilizza p4dn.dll a 32 bit:

La mia domanda è questa? In mancanza di questo, c'è un modo per l'IDE di rilevare questo e non riescono a costruire?

In alternativa è possibile creare un file manifest che posso mettere accanto al p4api o p4dn.dll in modo che eventuali applicazioni che li utilizzano verrà eseguito automaticamente a 32 bit?

È stato utile?

Soluzione

Se avete assolutamente altra scelta che si può usare corflags come parte di uno script di compilazione automatica per contrassegnare tutte le DLL .NET come x86 - corflags /32bit+ file.dll. Anche se penso che una corretta formazione degli sviluppatori è la soluzione più adeguata.

Altri suggerimenti

CLR controlla il tipo di piattaforma solo se viene caricato un assembly dal GAC. Credo che p4dn.dll è contenuto nella cartella principale dell'applicazione, quindi penso che ti sbagli nella tua logica.

Sembra che p4dn.dll non può essere utilizzato quando è in esecuzione in modalità WoW64 e l'applicazione è in esecuzione in modalità x64 in modo nativo. Penso che il modo migliore è quello di compilare tutte il progetto mirato a x86 (32) della piattaforma. O romperlo nelle parti, in modo chiamante p4dn.dll sarebbe sempre in esecuzione in modalità WoW64.

Inoltre, è necessario contattare gli sviluppatori p4net per aggiungere il supporto completo della piattaforma x64.

Non conosco alcun modo per farlo automaticamente. Ti consiglierei di fare quanto segue:

  • Treno sviluppatori,
  • Aggiungi questa discussione alla tua base di conoscenza interna e
  • Aggiungi piattaforme x64 ai vostri ambienti di test

Inoltre, si potrebbe pensare di scrivere un VS add-in, che controlla la piattaforma di destinazione corretta. Ma poi ci potrebbe essere la creazione dinamica di componenti COM, troppo ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top