.NET MissingMethodException verificano su una delle migliaia di computer degli utenti finali - una visione chiara?

StackOverflow https://stackoverflow.com/questions/1097519

Domanda

Questo problema mi ha sconcertato, sta interessando un singolo utente (a mia conoscenza) e non è stato riprodotto da noi ...

  • L'utente sta ricevendo un MissingMethodException, il nostro file di traccia indica è che si verificano dopo creiamo una nuova istanza di un componente, quando stiamo chiamando un metodo / Setup Initialize in preparazione per averlo fare il lavoro (InitializeWorkerByArgument nel esempio)

  • Il metodo specificato dal errore è un metodo di interfaccia, quali un implementa classe di base e classi derivate dalla classe base può ignorare quando necessario

  • L'utente ha l'ultima versione della nostra applicazione

  • Tutto il codice fornito viene spedito all'interno di un singolo gruppo di

Ecco una versione molto distillato del componente:

class Widget : UserControl
{

    public void DoSomething(string argument)
    {
        InitializeWorkerByArgument(argument);
        this.Worker.DoWork();
    }

    private void InitializeWorkerByArgument(string argument)
    {
        switch (argument)
        {
            case "SomeArgument":
                this.Worker = new SomeWidgetWorker();
                break;
        }

        // The issue I'm tracking down would have occured during "new SomeWidgetWorker()"
        // and would have resulted in a missing method exception stating that
        // method "DoWork" could not be found.

        this.Worker.DoWorkComplete += new EventHandler(Worker_DoWorkComplete);
    }

    private IWidgetWorker Worker
    {
        get;
        set;
    }

    void Worker_DoWorkComplete(object sender, EventArgs e)
    {
        MessageBox.Show("All done");
    }
}

interface IWidgetWorker
{
    void DoWork();
    event EventHandler DoWorkComplete;
}

abstract class BaseWorker : IWidgetWorker
{
    virtual public void DoWork()
    {
        System.Threading.Thread.Sleep(1000);
        RaiseDoWorkComplete(this, null);
    }

    internal void RaiseDoWorkComplete(object sender, EventArgs e)
    {
        if (DoWorkComplete != null)
        {
            DoWorkComplete(this, null);
        }
    }

    public event EventHandler DoWorkComplete;
}

class SomeWidgetWorker : BaseWorker
{
    public override void DoWork()
    {
        System.Threading.Thread.Sleep(2000);
        RaiseDoWorkComplete(this, null);
    }
}
È stato utile?

Soluzione

Data la rarità del problema, sembra probabile che questo è il risultato di un ambiente software rotta su computer che di un utente.

Altri suggerimenti

Che suona come si sta utilizzando un metodo, che è stato comunicato in una SP del .NET Framework 2.0.

Ho avuto lo stesso problema, come ho usato il metodo di WaitOne (int) di ManualResetEvent . Ho dovuto sostituirlo con WaitOne (int, bool) .

Il metodo WaitOne (int) è stato aggiunto nel .NET Framework SP 2, che viene applicato quando si installa .NET Framework 3.5 SP1.

In tal caso, vi consiglio di leggere il MSDN. Il "Informazioni sulla versione" ti dice in quale quadro o service pack un metodo specifico è supportato.

Qualche possibilità questo è un problema di dipendenza .NET Framework e l'utente non ha la versione richiesta di .NET? Solo un pensiero.

è il sistema operativo sulla macchina problema diverso da tutti gli altri? Ho il debug un simile errore di anni fa e I pensare ho tracciato al comportamento strano su un particolare tipo di Windows nella zona di tipo Net risolvere.

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