2015-02-25 6 views
1

Je référence un fichier exe dans une DLL. Lorsqu'il est exécuté en mode DEBUG tout fonctionne bien, mais lorsqu'il est exécuté en le mode de sortie ci-dessous exception est levéeSystem.BadImageFormatException s'est produite lors de la génération en mode de publication

System.BadImageFormatException occurred 
    HResult=-2147024885 
    Message=Could not load file or assembly 'Presensoft.InlineMarker, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format. 
    Source=Presensoft.ApplicationServer 
    FileName=Presensoft.InlineMarker, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
    FusionLog==== Pre-bind state information === 
LOG: DisplayName = Presensoft.InlineMarker, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
(Fully-specified) 
LOG: Appbase = file:///F:/PresensoftNewTrunk/Trunk/Email Archiver/EmailService/Presensoft.ApplicationServerHost/bin/Release/ 
LOG: Initial PrivatePath = NULL 
Calling assembly : Presensoft.ApplicationServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: F:\PresensoftNewTrunk\Trunk\Email Archiver\EmailService\Presensoft.ApplicationServerHost\bin\Release\Presensoft.ApplicationServerHost.vshost.exe.config 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. 
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). 
LOG: Attempting download of new URL file:///F:/PresensoftNewTrunk/Trunk/Email Archiver/EmailService/Presensoft.ApplicationServerHost/bin/Release/Presensoft.InlineMarker.DLL. 
LOG: Attempting download of new URL file:///F:/PresensoftNewTrunk/Trunk/Email Archiver/EmailService/Presensoft.ApplicationServerHost/bin/Release/Presensoft.InlineMarker/Presensoft.InlineMarker.DLL. 
LOG: Attempting download of new URL file:///F:/PresensoftNewTrunk/Trunk/Email Archiver/EmailService/Presensoft.ApplicationServerHost/bin/Release/Presensoft.InlineMarker.EXE. 
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated. 

    StackTrace: 
     at Presensoft.ApplicationServer.ExchangeServer2010Push.PostProcessingEmailsQueue() 
     at Presensoft.ApplicationServer.ExchangeServer2010Push.RunPushService(Guid appServerID) in f:\PresensoftNewTrunk\Trunk\Email Archiver\EmailService\Presensoft.ApplicationServer\ExchangeServer2010Push.cs:line 48 
    InnerException: 

Je ne sais pas s'il y a un problème avec sondage fichier exe lors de l'exécution en mode RELEASE.

Répondre

6

Plus d'un mode Debug/Release Je dirais que c'est un problème 32 vs 64 bits. Vous avez probablement la cible plate-forme pour le mode débogage à Auto et pour le mode de libération à 32/64 bits et vous utilisez une DLL qui est seulement 32 ou 64 bits, donc en mode Debug (Platform cible Auto) le .NET peut "sélectionner" entre 32 et 64 bits pour être compatible avec la DLL, alors que dans Release (Plate-forme cible 32 ou 64 bits), il ne peut pas.

(notez que si vous avez plusieurs projets dans la même solution que vous devez vérifier tous les projets propriétés pour cela! Il est dans les propriétés de chaque projet, Construire, cible la plate-forme)

+0

C'est probablement l'inverse. En supposant que OP a un processus de 64 bits et l'exe est de 32 bits seulement, vous obtenez ce problème lorsque DEBUG est réglé sur 32 bits, et RELEASE est réglé sur auto. –

+0

J'avais vérifié les propriétés de chaque projet et elles étaient toutes identiques. Mais quand j'ai ouvert le gestionnaire de configuration, il y avait des différences dans le bitness. Merci!!! – Sameer

+0

Je voulais juste noter. J'ai juste combattu cette erreur pendant des heures. Je n'ai fait aucun changement autre que l'installation de VS 2017, qui a bien fonctionné tout de suite après. J'utilise 2015. Je suis revenu après quelques heures et j'ai eu cette erreur. J'ai nettoyé la solution des tonnes de fois et reconstruit. Tard et à partir de TFS et enfin à l'improviste, il a commencé à travailler après avoir reçu le dernier pour la 10ème fois. Le dernier enregistrement était à moi. Je crois sérieusement qu'il y a un bug dans VS. – user3478586

0

Je suis tombé sur ce (ou quelque chose de similaire) hier aussi. Les modes Debug et Release sont définis sur AnyCPU mais l'exe fait référence à une DLL 32 bits. Pendant le débogage, l'exe semble être par défaut 32 bits (je suppose que Visual Studio est 32 bits) mais en mode release, il passe en 64 bits (je suppose que mon ordinateur est en 64 bits). Donc, quand je le force à toujours être 32 bits (x86), tout devrait fonctionner! J'espère que cela a aidé!