wake-up-neo.com

CSC: Fehler CS7038: Modul konnte nicht gesendet werden

Nach der Installation von Visual Studio 2015 und dem Erstellen meines Projekts wird der Fehler angezeigt

"CSC: Fehler CS7038: Modul konnte nicht gesendet werden". 

Allerdings ist meine Lösung in Visual Studio 2013 in Ordnung.

Es ist ein ASP.NET Webforms-Projekt .NET 4.0

Jemand?

UPDATE: Es sieht so aus, als ob das Problem mit Red Gate Smart Assembly in Kombination mit Methodenparametern mit Standardwerten zu tun hat.

UPDATE: Smart Assembly 6.9 behebt den Fehler für mich.

23
Orlando Helmer

Bekam den gleichen Fehler (Neuinstallation des VS2015 Enterprise, ASP.NET Webforms Project .NET 4.0).

Nach einiger Untersuchung habe ich herausgefunden, dass es zwei DLLs in Referenzen gibt, die dies verursachen. Beide sind .Net 2.0-Baugruppen und beide werden durch Red Gate Smart Assembly 6.5 verschleiert. Und der wahre Grund ist ... Verschleierung .

Glücklicherweise sind diese Baugruppen meine, also habe ich versucht, sie ohne die Verwendung von Smart Assembly zu bauen - der Fehler ist weg.

Interessant ist, dass keine Fehler oder Warnungen vor dem Erstellen eines Projekts von Visual Studio angezeigt werden.

Viel Glück!

EDIT: Beim Aktualisieren von Smart Assembly auf Version 6.9 wurde ein Problem behoben.

7
Andrey Ivashov

Ursprüngliches Snippet:

    private void radButton1_Click(object sender, EventArgs e)
    {
        string perp = radTextBox1.Text;

        int i = 0;
        DataRow arp = ale.Rows[i];
        while (i <= ale.Rows.Count)
        {
            if (ale.Rows[i].Field<>("FullName") = perp)
            {
                arp = ale.Rows[i];
                ale.Rows.Remove(arp);
            }

        }

        i = ale.Rows.Count;
        radLabel1.Text = i.ToString();
    }

Das geändert:

    if (ale.Rows[i].Field<>("FullName") = perp)

Zu diesem:

    if (ale.Rows[i].Field<String>("FullName") == perp)
12
Scooter

Wie @Andrey berichtete, scheint dies ein Problem bei verschleierten Baugruppen zu sein, das Roslyn einige Schwierigkeiten bereitet. Heute konnte ich eine Live-Reproduktion dieses Fehlers erhalten, und die Hauptursache scheint zu sein, dass der Obfuscator die Speicherung von Standardparameterwerten in Metadaten ungültig macht/beschädigt. Wenn Sie durch Iildasm laufen, werden die Standardwerte wie folgt angezeigt:

.param [3] /* Invalid default value for 0800001F: */

In der vorherigen Version des Compilers wurde dieses Szenario behandelt, indem der ungültige Wert als null oder default(T) behandelt wurde. Wir werden Roslyn mit demselben Verhalten fixieren. 

6
JaredPar

Ich hatte auch diese Ausnahme in VB.NET (Visual Studio 2015 - Pro) geworfen und eine einzelne Zeile isoliert, die den Fehler verursacht hat. 

Wenn Sie in der folgenden Codezeile model als Ganzzahl definieren, wie in:

Dim model as Integer = 2

und dann verwenden Sie:

Const N As Integer = model

sie werden die Ausnahme werfen.

Wenn ich das jedoch geändert habe: 

Dim N As Integer = model

die Ausnahme wurde nicht geworfen. Die Const-Syntax bestand aus Legacy-Code eines anderen Programms, dem ich Modell schnell hinzufügte. Konstanten können nicht auf vordefinierte Integer-Typen festgelegt werden. 

5
4k3x9d7r

Erweitere die Antwort von @ jony-adamit:

Ich hatte auch diesen Kompilierungsfehler in C # (Visual Studio 2015). Es war auf die Unterschiede in der Compiler-Ausgabe von .NET 4.5 und Roslyn, dem neuen Compiler in VS2015, zurückzuführen. Sie können den folgenden Code verwenden und selbst ausführen oder dotnetfiddle ( https://dotnetfiddle.net/fa2rMs ) verwenden und zwischen Compilern wechseln.

In .NET 4.5-Compiler (C # -Compiler Version 12.0 oder früher) erhalten Sie folgende Meldung:

Kompilierungsfehler (Zeile 16, Spalte 7): Der Typ- oder Namespace-Name 'Select' ist im Namespace 'Tools.Weapons' nicht vorhanden (fehlt Ihnen Eine Assemblyreferenz?)

In den Compilerversionen Roslyn 1.0.0 und 1.1.0 erhalten Sie folgende Meldung:

Kompilierungsfehler (Zeile 1, Spalte 1): Modul konnte nicht ausgegeben werden "MyAssembly".


Code zum Reproduzieren des Fehlers (beachten Sie den Namensraum):

public class Program
{   
    public static void Main()
    {
        Tools.Delegater.Work();
    }
}

namespace Tools 
{
    public static class Delegater
    {   
        public static System.Action Work = () => 
        {
            var query = from x in Weapons
                        select x;
        };
    }
}

namespace Tools.Weapons
{
    public class Cannon { }
}

Wie Sie an den Compilernachrichten erkennen können, lässt Roslyns Nachricht Sie raten, was und wo der Compilerfehler ist. Abhängig von der Größe der Anwendung kann es einige Tage oder Wochen dauern, bis die Ursache der Fehler ermittelt wurde. Die Nachricht im vorherigen Compiler zeigte Ihnen jedoch genau die Stelle an, an der der Code überprüft werden sollte.

Ein weiterer großer Unterschied ist, dass der vorherige Compiler für dieses Szenario einen Syntaxfehler in Visual Studio anzeigt, Roslyn (atm) jedoch nicht. Wenn Sie jedoch wissen, wo Sie suchen müssen, und Sie den Mauszeiger über der 'x' -Variable in der Anweisung linq to sql bewegen, werden Sie feststellen, dass Rosyln die Interpretation nicht versteht.

3
ntieszen.pro

Ich habe eine ähnliche Fehlermeldung erhalten: "BC36970. Modul 'Something.dll' konnte nicht ausgegeben werden." Ich habe festgestellt, dass der Fehlercode nicht derselbe ist, aber es handelt sich auch um ein Problem, bei dem die Ausgabe fehlgeschlagen ist. Also dachte ich würde meine Antwort teilen. 

Problem: Mein Problem war, dass ich eine Zeichenfolge hatte, die eine -Konstante war , aber ich versuchte, eine andere Zeichenfolge an die Zeichenkette anzuhängen, so wie (mit dem VB Code):

Dim MyString1 As String = "Test1"
Const MyString2 As String = "Test2" & MyString1

Lösung: Ich musste einfach den zweiten String von Const nach Dim konvertieren und der Fehler verschwand:

Dim MyString1 As String = "Test1"
Dim MyString2 As String = "Test2" & MyString1
3
Hank Scorpio

Ich hatte gerade "Modul konnte nicht gesendet werden". Ich setze versehentlich leere Klammern in einen Aufruf einer generischen Erweiterungsmethode ein, nur wenn sie sich in einem ternären Operator befinden, wie folgt:

var a = b == 6 ? 8 : x.Foo<>();

(Außerhalb einer ternären Operation bekomme ich nur einen regelmäßigen Fehler. CS7003: Unerwarteter Gebrauch eines ungebundenen generischen Namens.)

2

Es gibt einen weiteren Fehler, der genau diesen Fehler verursachen kann:

Ist mir nach dem Ändern eines Eigenschaftennamens ohne Refactoring passiert, was dazu führte, dass ein Linq-Code den namespace selbst aufruft!

Um den Fehler in Aktion zu sehen, müssen Sie nur diesen Code ausführen:

public static int Test()
{
    var x = from c in ConsoleApplication5
        select 3;

    return x.First();
}

Dabei ist ConsoleApplication5 der Namespace!
Dies geschieht nur in VS2015.

Update:
Es gibt ein Problem jetzt auf GitHub, falls es jemanden interessiert.

1
Jony Adamit

Ich habe diese Fehlermeldung erhalten, als ich mit der Datentabelle gearbeitet habe, und habe keinen Datentyp angegeben, für den es erforderlich war:

bool temp = dtTab.AsEnumerable().Any(row => row.Field<>("active") == 1);

Durch die Angabe eines richtigen Datentyps wurde der Fehler beseitigt. Ich musste es auch in einen String umwandeln, um es richtig vergleichen zu können.

bool temp = dtTab.AsEnumerable().Any(row => row.Field<Boolean>("active").toString() == "1");
1
Pallavi

Ich erhalte mit diesem Code den gleichen Fehler "Modul konnte nicht ausgegeben werden", aber das Ändern von "Const" in "Dim" behebt das Problem:

Dim userStatus1 As String = convAttrSet("user_status")
Dim userStatus2 As String = convAttrSet("user_status")
Const PENDING As Boolean = (userStatus1 = userStatus2)
1
energyplay

Diese Antwort ähnelt der von @wrtsvkrfm

  'Dim NEWLINE As String = "<BR/>"
   Dim NEWLINE As String = vbCrLf

 Const HT_QTC_VENDOR As String = "<B>some stuff {0}</B>" & NEWLINE

Dies bewirkt, dass die DLL nicht ausgegeben wird. 

Ändern Sie die oberen 2 Zeilen in 

  'Const NEWLINE As String = "<BR/>"
   Const NEWLINE As String = vbCrLf

und der Fehler geht weg. Dies sollte ein Kompilierungsfehler sein. Ein CONST kann nicht eindeutig von einer Variablen abhängen, die ... na ja, variieren kann. :-)

1
greg

Ich habe diesen Fehler erhalten, als ich eine generische Methode verwendet habe, aber den Typ nicht enthalten konnte.

Dieser Code gab den Fehler aus:

example.GetValue<>(foo);

Die Korrektur bestand einfach darin, den Typ anzugeben:

example.GetValue<string>(foo);

Ich bin nicht sicher, ob das fehlerhafte Beispiel eine gültige Syntax ist oder nicht: Ich hätte einen Syntaxfehler erwartet, wenn es nicht dieser Fehler ist, und Intellisense akzeptierte die Syntax.

1
Hutch

Ich habe auch diesen Fehler erhalten, es scheint einige wichtige Gründe zu geben, die diesen Fehler verursachen.

Ich habe diese Antwort gepostet, um die genannten Lösungen zusammenzufassen und anderen zu helfen, diesen Fehler schnell zu beheben.

Bitte lesen Sie alle Antworten hier auf dieser Seite sorgfältig durch. Ich bin sicher, dass Sie das Problem mit einer der genannten Lösungen lösen können. Viel Glück :)

1
Mehdi Dehghani

Dies kann bei Fehlern auftreten, die der Compiler nicht abgefangen hat. Wahrscheinlich

  1. entweder weiß der Compiler nicht, welche IL er ausgeben soll, oder
  2. es weiß, aber in dem Prozess, es tatsächlich zu tun, passiert etwas Unerwartetes oder
  3. die von ihm ausgegebene IL ist ungültig, und ein Sicherheitsnetz auf einer niedrigeren Ebene als der Compiler selbst erzeugt einen Fehler, den der Compiler nicht verarbeiten kann.

In jedem Fall ist dies CS7038 tritt auf, weil C # gültig ist und der Compiler möglicherweise an einer unerwarteten Stelle einen Fehler festgestellt hat, der es nicht mehr möglich macht, ihn auf eine von Ihnen geschriebene Quellcodezeile zurückzuführen. Daher die scheinbar zufälligen Fehler, die die Leute hier melden, um dies zu verursachen.

Ich benutze C # seit Jahrzehnten und komme jetzt hierher, weil ich zum ersten Mal einen solchen Fehler erhalte.

In meinem Fall generiert der folgende Code den Fehler. Verwenden <LangVersion>Preview</LangVersion> in der Projektdatei und verwenden Sie den C # 8-Compiler in der Visual Studio 2019-Vorschau.

void FailToEmitDll(ReadOnlySpan<char> span) {
  ReadOnlySpan<char> temp;
  temp = 1 switch
  {
    _ => span
  };
}

Seltsamerweise, wenn Sie die Deklaration und die Zuweisung so ändern, dass sie wie folgt lautet: var temp stattdessen funktioniert alles gut.

0
Eric

Grund: Dieser Fehler scheint aufgetreten zu sein, wenn wir etwas seltsames in unserem Code haben. Ich habe einen Fehler gemacht, als ich den aktuellen Benutzer von seiner Identität abhob.

Fehlercode: Int currentUserId = User.Identity.GetUserId <> ();

Fixcode: Bitte geben Sie den Datentyp nach GetUserID <----------> () an. In diesem Fall habe ich int angegeben.

Hinweis Bitte versuchen Sie, Ihren Code Schritt für Schritt rückgängig zu machen, damit Sie dieses Problem finden können. Ansonsten war es sehr schwierig für mich, diesen Fehler zu verfolgen.

Vielen Dank

0
yuvaraj prabhu

Für mich trat das Problem auf, nachdem ein Postbuild-Schritt hinzugefügt wurde, der die assemblyinfo.cs (NetRevisionTool.exe) ändert. __ Achten Sie darauf, die AssemblyInfo.cs nicht zwischen building und Edit zu ändern und fortzufahren.

0
codingdave

Ich habe diesen Fehler bei der Verwendung von Linq zu Entitäten erhalten und meine Linq-Abfrage hatte einen Syntaxfehler in der Join-Klausel

0
Jay Jay Jay

Ich hatte auch diese Ausnahme in VB.NET (Visual Studio 2015 - Pro) geworfen und eine einzelne Zeile isoliert, die den Fehler verursacht hat

     Faulty....
    Dim i As Short
    Dim j As Short = BancoCombienElement(LaChaine)
    Const a  = (22 / 60) * j
    Dim TiTxt As String = ""
    Dim S_8_10_12_14 As String = ""

    Work good!!!!!!!!
    Dim i As Short
    Dim j As Short = BancoCombienElement(LaChaine)
    Dim a As Short = (22 / 60) * j
    Dim TiTxt As String = ""
    Dim S_8_10_12_14 As String = ""
0
guest