2012-02-11 12 views
22

OK, quindi ho creato un'applicazione C# e l'ho installata nella mia casella di test. La mia app funziona perfettamente sul mio box di sviluppo, ma quando installo su un altro computer si blocca nel Main(). Ho l'EventType: CLR20r3C# Windows Appication Evento: CLR20r3 all'avvio dell'applicazione

Ecco il messaggio di evento

Problem signature: 
    Problem Event Name: CLR20r3 
    Problem Signature 01: logfileviewer.exe 
    Problem Signature 02: 1.0.0.0 
    Problem Signature 03: 4f356c9c 
    Problem Signature 04: LogFileViewer 
    Problem Signature 05: 1.0.0.0 
    Problem Signature 06: 4f356c9c 
    Problem Signature 07: 94 
    Problem Signature 08: 44 
    Problem Signature 09: System.IO.FileNotFoundException 
    OS Version: 6.1.7601.2.1.0.256.1 
    Locale ID: 1033 
    Additional Information 1: 0a9e 
    Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 
    Additional Information 3: 0a9e 
    Additional Information 4: 0a9e372d3b4ad19135b953a78882e789 

ho usato i dettagli e guardato il codice di errore in IL Disassembler e la camma di nuovo con il seguente ...

Method #5 (06000094) 
    ------------------------------------------------------- 
    MethodName: .ctor (06000094) 
    Flags : [Public] [HideBySig] [ReuseSlot] [SpecialName] [RTSpecialName] [.ctor] (00001886) 
    RVA : 0x000081d0 
    ImplFlags : [IL] [Managed] (00000000) 
    CallCnvntn: [DEFAULT] 
    hasThis 
    ReturnType: Void 
    No arguments. 

.NET 4.0 è stato disinstallato e reinstallato sul sistema e non ha modificato nulla. Ho cercato su tutta la rete e tutti con lo stesso problema non sembrano avere una soluzione. Ora ho passato un giorno e mezzo a questo problema. Mi dispiacerebbe perdere la mia scadenza per non essere in grado di avviare l'applicazione.

Questo è l'unico codice nel mio principale()

static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new frmMain()); 
    } 

Ecco i dettagli dal Visualizzatore eventi

Application: LogFileViewer.exe 
    Framework Version: v4.0.30319 
    Description: The process was terminated due to an unhandled exception. 
    Exception Info: System.IO.FileNotFoundException 
    Stack: 
     at LogFileViewer.frmMain.InitializeComponent() 
     at LogFileViewer.frmMain..ctor() 
     at LogFileViewer.Program.Main() 

EventData

Application: LogFileViewer.exe 
    Framework Version: v4.0.30319 
    Description: The process was terminated due to an unhandled exception. 
    Exception Info: System.IO.FileNotFoundException 
    Stack: at LogFileViewer.frmMain.InitializeComponent() at LogFileViewer.frmMain..ctor() at LogFileViewer.Program.Main() 

Non sono sicuro di come il progettista può avere un'eccezione FileNotFound. Sto usando DotNetBar.dll e sto facendo riferimento alla directory di installazione, quindi dovrebbe essere buono. Posso postare il mio designer, se vuoi, ma c'è un bel po 'lì. qualcuno ha qualche idea?

+2

Cattura l'eccezione FileNotFoundException e visualizza i dettagli per capire quale file manca. Scommetto che è DotNetBar.dll – tenorsax

+0

Sì, era DotNetBar. Ho dovuto spostarlo nella radice delle applicazioni anche se lo stavo riferendo da una cartella denominata "risorse". – Tyler

risposta

20

Ho riscontrato questo stesso problema quando la mia applicazione dipendeva da un assembly referenziato che non era presente sulla macchina di distribuzione. Non sono sicuro di cosa intenda "facendo riferimento a DotNetBar fuori dalla directory di installazione" - assicurati che sia impostato su CopyLocal=true nel tuo progetto, o che esista nello stesso percorso completo sia sul tuo computer di sviluppo che di produzione.

+0

Sì, oppure puoi provare uno strumento come assembly intelligente che consente di incorporare le dipendenze nel tuo eseguibile oltre a offuscarlo, in modo che tu possa sapere se è stato causato da una dll mancante. – Digvijay

+0

Anche se sto facendo riferimento a DotNetBar.dll da una cartella di risorse che ho creato. Sembra che devo effettivamente avere il file .dll nella directory root in cui risiede il mio .exe. Non ho alcuna spiegazione per questo. Forse qualcuno può illuminarmi sulla ragione. Quindi per gli altri con lo stesso problema. Sposta qualsiasi cosa .dll stai facendo riferimento alla tua cartella principale e vedi se questo risolve il tuo problema. – Tyler

+0

[Questo potrebbe essere d'aiuto] (http://msdn.microsoft.com/en-us/library/yx7xezcf (v = vs.71) .aspx) – RyanR

0

Stanno litigando tutto questo mattina e ora hanno risolto e perché è successo. Pubblicare con la speranza aiuta gli altri

Ho installato Krypton.Toolkit che ha aggiunto automaticamente gli strumenti alla casella degli strumenti di Visual Studio. Ho quindi aggiunto gli strumenti al designer, che ha aggiunto automaticamente la dll ai riferimenti del projrect, tuttavia il toolkit è stato contrassegnato come CopyLocal = false

Ho creato un programma di installazione, utilizzando tutte le DLL nella cartella di rilascio (ovviamente sopra dll non era lì).

Impostazione di copylocal = true, quindi ricostruzione dell'installer, tutto ha funzionato correttamente.

3

Ho riscontrato lo stesso problema quando ho creato un'applicazione su una scatola di Windows 7 precedentemente mantenuta su una macchina XP.

Il programma ha funzionato correttamente quando è stato creato per Debug, ma non è riuscito con questo errore quando è stato creato per il rilascio. Ho trovato la risposta sulla pagina delle proprietà del progetto. Vai alla scheda "Build" e prova a cambiare Platform Target da "Any CPU" a "x86".

-6

per risolvere il problema CLR20r3 set - Local User Policy \ Computer Configuration \ Windows Settings \ Security Settings \ Local Policies \ Security Options - System cryptography: Utilizzare FIPS 140 compliant algoritmi crittografici, tra cui la crittografia, hashing e firma - Disabilitare

3

.NET ha due CLR 2.0 e 4.0. CLR 2.0 funziona fino a .NET framework 3.5. CLR 4.0 funziona da .NET 4.0 in poi. È possibile che la propria soluzione utilizzi un CLR diverso rispetto agli assiemi di riferimento. Nel tuo ambiente di sviluppo locale potresti avere entrambi i CLR e quindi non hai avuto alcun problema. Tuttavia, quando ci si sposta in ambienti di distribuzione, potrebbero avere un solo CLR e si ottiene questo errore.

+0

Per gli altri vedere questo: puoi provare a risolvere questo aggiornando il tuo riferimento assembly invece di richiedere al client di installare il CLR precedente. Il mio collega stava aggiornando un progetto a 4.5 e avendo questo problema. Il mio primo riflesso è stato "hai aggiornato i pacchetti di nuget?" abbastanza sicuro.... –