2012-07-12 15 views
25

Abbiamo un'applicazione Windows Form destinata a .Net Framework 4.0. Dopo l'installazione di .Net Framework 4.5, l'applicazione si avvia in modo anomalo. Dovremo indagare sugli arresti anomali e probabilmente dovremo sistemare le cose dalla nostra parte. Ma c'è un setting che possiamo attivare per mantenere il vecchio comportamento fino a quando non siamo pronti per usare .Net 4.5?Come mantenere il comportamento di .Net 4.0 se è installato .Net 4.5?


Aggiornamento 07/12/2012: Abbiamo trovato la rottura cambiamento che fa sì che la nostra applicazione di crash: Dato uno System.Threading.Timer, quando si chiama Dispose (WaitHandle) con una maniglia che è già stato chiuso, quindi il Timer tenta di segnalare WaitHandle che genera un'eccezione. L'implementazione di .Net 4.0 di Timer era tollerante, ma 4.5 non lo è.

C'è un bug dalla nostra parte; non abbiamo una buona ragione per dargli un handle chiuso, quindi dovremo risolvere il problema ... finché non troviamo un altro bug ...

+0

I tuoi progetti sono impostati su ".NET framework 4.0"? –

+0

@LeonCullens: si lo sono. – Sylvain

+1

@Sly Vengo dal team di compatibilità di .NET Framework. Potresti inviarmi una copia su netfx45compat su Microsoft dot com in modo da poter dare un'occhiata? – Varun

risposta

29

Ma c'è un'impostazione che possiamo attivare per mantenere vecchio comportamento fino a quando non siamo pronti per l'uso. Net 4.5?

No. .NET 4.5 è una sostituzione sul posto di .NET 4. Quando lo si installa, si sta effettivamente eseguendo il nuovo framework.

In generale, dovrebbe essere completamente retrocompatibile, ma esiste un few breaking changes.

Sfortunatamente, questo significherà che tu (e tutti gli altri) dovrai testare e correggere i problemi su entrambi i framework se vuoi supportare l'esecuzione su una macchina con 4.5 installati e senza 4.5 installati. Fortunatamente, i cambiamenti improvvisi sono in genere tutti casi insoliti, quindi è improbabile che abbia un impatto sulla maggior parte degli utenti nella maggior parte degli scenari.

6

Ho discusso questo via e-mail con poster domanda originale - "Sly". Grazie Sly per aver aiutato a indagare. Si scopre che .NET4 e .NET4.5 si comportano allo stesso modo per l'API Dispose (waithandle). Quindi questo problema è potenzialmente non correlato a .NET4.5.

static void Main(string[] args) 
    { 
     System.Threading.Timer timer = new System.Threading.Timer(new System.Threading.TimerCallback(blah)); 
     System.Threading.EventWaitHandle eventWaitHandle = new System.Threading.EventWaitHandle(true, System.Threading.EventResetMode.ManualReset); 

     eventWaitHandle.Dispose(); 
     System.Threading.Thread.Sleep(2000); 
     timer.Dispose(eventWaitHandle); 
    } 

    private static void blah(object state) 
    { 
     Console.WriteLine(40); 
    } 
Problemi correlati