2016-03-22 9 views
3

ProblemSystem.MissingMethodException wird ausgelöst, wenn eine Methode mit ImmutableArray <> auf einer Schnittstelle in einer anderen DLL-Aufruf

ich den Code unten in den beiden jeweiligen DLLs haben. dll1 hängt von dll2 ab.

Wenn DoWork() aufgerufen wird, wird myInterface.MyListMethod(ImmutableList<byte>.Empty); in Ordnung ausgeführt. Wenn es myInterface.MyArrayMethod(ImmutableArray<byte>.Empty); die folgende Ausnahme auszuführen geht geworfen:

Exception:System.MissingMethodException: Method not found: Namespace.MyArrayMethod(System.Collections.Immutable.ImmutableArray'1<Byte>)

dll1.dll

public class TestClass 
{ 
    public void DoWork() 
    { 
     IMyInterface myInterface = new MyInterface(); 
     myInterface.MyListMethod(ImmutableList<byte>.Empty); 
     myInterface.MyArrayMethod(ImmutableArray<byte>.Empty);   
    } 
} 

dll2.dll

public class MyInterface : IMyInterface 
{ 
    public void MyArrayMethod(ImmutableArray<byte> byteArray) 
    { 
     // Do stuff 
    } 

    public void MyListMethod(ImmutableList<byte> byteList) 
    { 
     // Do stuff 
    } 
} 
public interface IMyInterface 
{ 
    void MyArrayMethod(ImmutableArray<byte> byteArray); 
    void MyListMethod(ImmutableList<byte> byteList); 
} 

Testing

Aus meiner Sicht scheint es, dass ImmutableArray<> Fehler ist, wie ich dies mit mehreren Typen versucht habe, einschließlich, wie Sie oben sehen können, mit anderen Typen im Immutable Namespace. Es passiert nur mit ImmutableArray<>, soweit ich es versucht habe.

Ich habe auch dafür gesorgt, dass beide dlls die aktuellen dlls sind und es keine alte cached Version gibt, die um den gac herum hängt. Aktualisieren der Schnittstelle, sodass eine andere Methode aufgerufen wird, bevor MyArrayMethod wie erwartet funktioniert.

Visual Studios nimmt speziell nicht aufrufen Referenzen auf die Methode auf der Schnittstelle, die ImmutableArray<> param enthält, aber es wird für Methoden mit der ImmutableList<>. Es werden auch Referenzen aufgenommen, wenn Sie den Parameter ImmutableArray<> aus der Methode entfernen.

MyArrayMethod only has one reference

Die Lösung baut jedoch in Ordnung, es nur, wenn es um JIT versucht zu Laufzeit, dass dieser Fehler ausgelöst wird.

+0

Haben Sie versucht, die Lösung zu reinigen und neu zu erstellen? Es ist interessant, dass sich die fehlende Methode auf einen String-Parameter bezieht. Dies würde möglicherweise auf einen alten Build hinweisen, der versucht hat, MyArrayMethod aufzurufen (string, ImmutableArray ); –

+0

Haben Sie diese Lösung ausprobiert? http://StackOverflow.com/Questions/29966585/asp-net-vnext-missingmethodexception-method-not-found-microsoft-codeanalysis – silkfire

+0

@silkfire yea Ich habe das müde.Beide DLLs lesen die gleiche unveränderliche DLL und ich habe verschiedene Versionen davon versucht. Um es hinzuzufügen. Dies geschieht nur für meine bestehenden Projekte, auf denen ich aufbauen möchte. Ich habe eine neue SLN mit zwei Projs und der gleichen unveränderlichen DLL erstellt und das hat kein Problem. Es scheint so zu sein, wie die SLN/Projs eingerichtet wurden. Ich vermute die Compiler-Version, aber ich weiß es wirklich nicht. –

Antwort

1

Wenn ich einen Projektverweis zu 'System.Runtime' hinzufüge, funktioniert alles einwandfrei. Das ist es.

Ich löste das Problem, als ich versuchte es zu repro-es gab ein Culture-Problem, das VS durch automatisches Hinzufügen eines Projektverweises auf System.Runtime gelöst wurde. Dies beendete das größere Problem. Die Verweise in VS funktionieren jetzt einwandfrei und der Code wird ohne ein Problem ausgeführt.

Wenn ich null übergeben, wird es ohne System.Runtime bauen, aber wenn ich die Methode aufrufen, wird es die Ausnahme werfen. Jedoch, wenn versuchen und einen Standard übergeben ImmutableArray erfordert es ich die System.Runtime hinzufügen. Dies behebt das Problem.

Ich habe keine Ahnung, warum dies mein Problem behoben, aber es tat.