7

Ich bin eine .NET 4.0-Anwendung in Visual Studio 2015 zu debuggen. Meine Anwendung erstellt und läuft gut, aber wenn ich versuche zu bearbeiten und während der Ausführung unter dem Debugger fortzusetzen Unabhängig davon, welche Änderungen ich mache oder wo ich sie in meinem Hauptprojekt mache, bekomme ich einen Dialog, der besagt:Fehler CS7038 (Modul konnte nicht gesendet werden) nur in Bearbeiten und Fortfahren

Es wurden Änderungen vorgenommen, die nicht kompiliert werden können. Die Ausführung kann nicht fortgesetzt werden, bis die Compilerfehler behoben sind.

Als ein Beispiel für die Art von Veränderung ich rede, habe ich versucht, diese Zeile in verschiedenen Methoden hinzufügen:

Console.WriteLine("foo"); 

Wenn ich Visual Studio Fehlerlistenfenster sehen in, ich sehe nur ein Fehler, CS7038, mit der Beschreibung "Fehler beim Senden des Moduls '<my app name>'." Es wird kein Dateiname, keine Zeilennummer oder kein Zeichen angegeben. In meinem Code sind keine roten Unterstreichungen zu sehen. Wenn ich die laufende Anwendung stoppe, mit den Änderungen baue und erneut laufe, baut alles auf und läuft gut. Es scheint also eine Diskrepanz zu geben zwischen dem, was der Build-Time-Compiler und der Edit-and-Continue-Compiler für akzeptabel halten.

Kennt jemand einen Weg, um mehr Informationen über zu bekommen, warum die Kompilierung im Edit und Continue-Modus fehlschlägt? Ich habe etwas über das Anhängen und Debuggen des VBCSCompiler-Prozesses gelesen, also habe ich das ausprobiert, aber selbst wenn alle Ausnahmetypen beim Auslösen auf Bruch gesetzt sind, ist der angehängte VS nie kaputt gegangen.

Ich teile keinen Code, da dies keine Frage über meinen Code ist, sondern vielmehr über Strategien, um herauszufinden, was der Edit and Continue-Compiler für falsch hält, und für alle, die ich kenne, könnte die Quelle des Compilerfehlers irgendwo in meinem gesamten Projekt sein.

Edit:

Wie in den Kommentaren erwähnt, konnte ich einen Debugger Visual Studio befestigen und brechen, wenn eine Ausnahme bei einem Klick auf „Weiter“ geworfen wurde, nachdem Code bearbeiten. Die Ausnahme war eine System.NotSupportedException mit der folgenden Meldung: "Das Ändern der Version einer Assembly-Referenz ist während des Debuggens nicht zulässig". Es listet den Namen der betreffenden Assembly auf, die ein kleines VB.Net-Projekt war, das von meiner Anwendung verwendet wird, die meistens in C# ist. Ich versuche ein MCVE zu erstellen, um es an Microsoft zu senden, aber derzeit kann ich das Problem in einer kleineren Lösung mit nur einem VB- und einem C# -Projekt nicht reproduzieren.

Edit 2:

Ich habe eine Abhilfe und Selbst beantwortet die Frage gefunden, falls jemand anders jemals begegnet dieses seltsame Problem, aber ich bin die Reservierung der „Beantwortet“ Häkchen für jeden, der kann Erklären Sie, was passiert (warum der Compiler denkt, dass sich die Versionsnummer des referenzierten Projekts während der Bearbeitung geändert hat).

+0

Haben Sie alle Instanzen von VS beendet und neu gestartet? Hast du VS Einstellungen zurückgesetzt? Wenn nicht, würde ich dort anfangen. – David

+0

Ich habe VS neu gestartet, ja. Habe die VS-Einstellungen nicht zurückgesetzt, was beängstigend klingt. Gibt es eine Möglichkeit, Ihre Einstellungen zu speichern, damit Sie sie wiederherstellen können, wenn das Problem dadurch nicht behoben wird? – adv12

+0

Ja. Gehe zu Extras -> Einstellungen importieren und exportieren. Von dort können Sie die aktuellen Einstellungen speichern (exportieren), alte Einstellungen neu laden (importieren) oder alle zurücksetzen. Wenn Sie "Alles zurücksetzen" auswählen, wird auf dem nächsten Bildschirm gefragt, ob Sie Ihre aktuellen Einstellungen zuerst exportieren möchten (empfohlen). – David

Antwort

2

Ich habe einen Workaround für das Problem gefunden, aber ich verstehe nicht ganz, was vor sich ging. In dem VB.NET-Projekt, dessen Assembly-Version der Compiler Edit and Continue geändert hat, gab es eine Datei namens "AssemblyInfo.vb".Diese Datei enthält die folgende Zeile:

<Assembly: AssemblyVersion("3.0.*")> 

Die Montage-Version kann auch in den Projekteigenschaften, über die „Montagehinweise“ in der Registerkarte Anwendung eingestellt werden:

screenshot of Visual Studio's Project Properties for the VB.NET project with AssemblyVersion set in two places

Wenn ich entfernt die AssemblyVersion Zeile von AssemblyInfo.vb, ging mein Edit and Continue Problem weg. Zuerst dachte ich, dies liegt daran, dass die Felder im Assembly-Informationsfenster in einer anderen Datei als AssemblyInfo.vb gespeichert wurden, und es gab einen Konflikt zwischen den beiden, aber jetzt sehe ich, dass das Assembly-Informationsfenster nur eine praktische Möglichkeit ist, AssemblyInfo zu bearbeiten .vb: Wenn ich die Zeile in AssemblyInfo.vb lösche, wird sie im Fenster Assembly Information gelöscht.

Nach einigen weiteren Experimenten scheint es, dass der Stern in der Versionsnummer der Täter ist. Wenn ich die Assembly-Version vollständig festlege, geht mein Edit and Continue-Problem verloren. Und das referenzierte Projekt muss ein VB.NET Projekt sein. Ich habe das gleiche Setup mit einem C# -Projekt versucht, und ich konnte gut editieren und weitermachen.

Dies scheint sehr ein Randfall zu sein, und ich werde einen Fehlerbericht an Microsoft senden, aber in der Zwischenzeit würde ich gerne wissen, was eigentlich mit dem Compiler passiert - warum es zwei verschiedene wird Assembly-Versionen einer Assembly, die während des Debuggens wirklich nicht neu kompiliert werden sollten .... Wenn Sie eine gute Erklärung für das Geschehen haben, fügen Sie sie als Antwort hinzu.

Bearbeiten: here's the bug report I filed.

+0

Offenbar wurde dein Fehlerbericht entfernt ... :-( – Heinzi

Verwandte Themen