CSC: erreur CS7038: N'a pas émis le module
après l'installation de Visual Studio 2015 et la construction de mon projet je reçois l'erreur
"CSC : erreur CS7038: Impossible d'émettre module".
cependant ma solution se construit bien dans Visual Studio 2013.
C'est un ASP.NET webforms project.--1-->
tout le monde?
mise à jour: il semble que le problème a à voir avec L'assemblage intelligent Red Gate en combinaison avec les paramètres de méthode avec défaut valeur.
mise à jour: Smart Assemblée 6.9 corrige l'erreur pour moi.
17 réponses
Obtenu la même erreur (frais d'installation de la VS2015 de l'Entreprise, ASP.NET webforms projet .NET 4.0).
après une enquête, j'ai découvert qu'il y a deux DLLs dans les références qui causent cela. Tous les deux sont des assemblages .Net 2.0 et tous les deux sont obscurcis par Porte Rouge Smart Assemblée 6.5. Et la vraie raison est... obscurcissement.
heureusement, ces assemblages sont à moi, donc j'ai essayé de les construire sans utiliser de Smart Assembly - l'erreur a disparu.
il est intéressant de noter qu'aucune erreur ou avertissement n'a été affiché par Visual Studio avant d'essayer de construire un projet.
Bonne chance!
EDIT: la mise à jour de Smart Assembly vers la version 6.9 a corrigé un problème.
Original Extrait De Code:
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();
}
Changé ceci:
if (ale.Rows[i].Field<>("FullName") = perp)
À:
if (ale.Rows[i].Field<String>("FullName") == perp)
comme @Andrey l'a signalé, cela semble être un problème avec des assemblages obscurcis qui cause des difficultés à Roslyn. Aujourd'hui, j'ai pu obtenir un repro en direct de cette erreur et la cause fondamentale semble être l'obfuscator qui invalide / corrompt la façon dont les valeurs des paramètres par défaut sont stockées dans les métadonnées. Quand ildasm est exécuté, les valeurs par défaut s'affichent comme suit:
.param [3] /* Invalid default value for 0800001F: */
la version précédente du compilateur a traité ce scénario en traitant la valeur invalide comme null
ou default(T)
. Nous allons réparer Roslyn pour avoir le même comportement.
j'ai aussi eu cette exception être jeté dans VB.NET (Visual Studio 2015-Pro), et isolé une seule ligne qui était à l'origine de l'erreur.
Dans la ligne de code ci-dessous, si vous définissez model
comme entier, comme:
Dim model as Integer = 2
et ensuite utiliser:
Const N As Integer = model
vous allez jeter l'exception.
Cependant, lorsque j'ai modifié ceci:
Dim N As Integer = model
l'exception n'a pas été levée. La syntaxe de Const était du code d'héritage d'un autre programme que j'ai rapidement ajouté le modèle à, et les constantes ne peuvent pas être réglées à des types entiers prédéfinis.
prolongeant la réponse de @jony-adamit:
j'ai aussi eu cette erreur de compilation en C# (Visual Studio 2015). Cela s'est traduit par les différences dans la sortie du compilateur de .NET 4.5 et Roslyn le nouveau compilateur dans VS2015. Vous pouvez prendre le code ci-dessous et l'exécuter vous-même ou utiliser dotnetfiddle (https://dotnetfiddle.net/fa2rMs) et passer d'un compilateur à l'autre.
dans .net 4.5 compilateur (C# compilateur version 12.0 ou plus tôt) vous obtenez ce message:
erreur de Compilation (ligne 16, col 7): le type ou le nom d'espace de noms 'Sélectionnez' n'existe pas dans l'espace de noms 'Outils.Les armes " (vous manque une référence d'assembly?)
dans les versions de compilateurs Roslyn 1.0.0 et 1.1.0 vous obtenez ce message:
erreur de Compilation (ligne 1, col 1): N'a pas émis de module "MyAssembly".
Code pour reproduire l'erreur (avis l'espace de noms):
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 { }
}
Comme vous pouvez le voir dans les messages compilateur, Roslyn message vous laisse deviner à quoi et où sur l'erreur du compilateur. Et selon la taille de l'application, le manque de détails pourrait prendre des jours ou des semaines pour découvrir la cause. Alors que le message dans le compilateur précédent vous a indiqué l'endroit exact pour commencer à réviser votre code.
une autre grande différence est que le compilateur précédent vous montrera un erreur de syntaxe dans Visual Studio pour ce scénario, mais malheureusement Roslyn (atm) ne le fait pas. Cependant, si vous saviez où regarder et que vous avez placé votre souris au-dessus de la variable 'x' dans la déclaration linq to sql, alors vous verriez que Rosyln ne comprend pas comment l'interpréter.
j'ai eu une erreur similaire:" BC36970. Pas réussi à émettre module " quelque Chose.dll". " je me rends compte que le code d'erreur n'est pas le même, mais c'est aussi un problème de type "échec d'émission" donc j'ai pensé que je partagerais ma réponse.
Problème: mon problème était que j'avais une chaîne qui était un constante mais j'ai essayé d'ajouter une autre corde, comme (à l'aide de code VB):
Dim MyString1 As String = "Test1"
Const MyString2 As String = "Test2" & MyString1
Solution: j'ai simplement eu à convertir les deuxième chaîne à partir de Const Dim et l'erreur a disparu:
Dim MyString1 As String = "Test1"
Dim MyString2 As String = "Test2" & MyString1
je viens d'avoir "Échoué à émettre de module". J'ai placé par erreur des crochets vides dans un appel à une méthode d'extension générique, seulement quand à l'intérieur d'un opérateur ternaire, comme ceci:
var A = b = = 6 ? 8 : X. Foo< > ();
(en dehors d'une opération ternaire, je viens d'obtenir l'erreur régulière CS7003: utilisation inattendue d'un nom générique non consolidé.)
j'obtiens la même erreur "Échec de l'émission du module" avec ce code mais changer "Const" en "Dim" résout le problème:
Dim userStatus1 As String = convAttrSet("user_status")
Dim userStatus2 As String = convAttrSet("user_status")
Const PENDING As Boolean = (userStatus1 = userStatus2)
il y a un autre bug qui peut causer cette erreur exacte:
arrivé à moi après avoir changé un nom de propriété sans refactoring, ce qui a causé un certain code linq pour appeler le namespace lui-même!
Pour voir le bug en action tout ce que vous avez à faire est d'exécuter ce morceau de code:
public static int Test()
{
var x = from c in ConsoleApplication5
select 3;
return x.First();
}
Où ConsoleApplication5 est l'espace de noms!
Cela n'arrive que dans VS2015.
mise à Jour:
Il y a un problème pour cela maintenant sur GitHub si quelqu'un est intéressé.
j'ai eu cette erreur quand je travaillais avec la table de données et n'ai pas fourni un type de données où il était requis:
bool temp = dtTab.AsEnumerable().Any(row => row.Field<>("active") == 1);
en lui donnant un type de données approprié on s'est débarrassé de l'erreur. J'ai aussi dû le convertir en chaîne pour pouvoir le comparer correctement -
bool temp = dtTab.AsEnumerable().Any(row => row.Field<Boolean>("active").toString() == "1");
cette réponse est similaire à celle Postée par @wrtsvkrfm
'Dim NEWLINE As String = "<BR/>"
Dim NEWLINE As String = vbCrLf
Const HT_QTC_VENDOR As String = "<B>some stuff {0}</B>" & NEWLINE
cela va faire que la DLL ne sera pas émise,
Modifier les 2 lignes
'Const NEWLINE As String = "<BR/>"
Const NEWLINE As String = vbCrLf
et l'erreur disparaît. Ce devrait être une erreur de compilation. Un CONST ne peut clairement pas dépendre d'une variable, qui peut..., bien..., varier. : -)
j'ai eu cette erreur en utilisant une méthode générique mais en omettant d'inclure le type.
ce code a donné l'erreur:
example.GetValue<>(foo);
Correction n'était tout simplement de spécifier le type:
example.GetValue<string>(foo);
Je ne suis pas sûr si l'exemple d'erroring est une syntaxe valide ou pas: J'aurais attendu une erreur de syntaxe si ce n'était pas plutôt cette erreur, et Intellisense a accepté la syntaxe.
j'ai eu cette erreur aussi, il semble qu'il y ait quelques raisons majeures qui causent cette erreur.
j'ai posté cette réponse à envelopper mentionné des solutions et aider les autres gars afin qu'ils puissent résoudre cette erreur rapidement
- à l'Aide d'obfuscation Dll par Smart Assemblée mentionné marqué réponseSolution: mise à Jour de Smart Assemblée à la version 6.9
- espace de Noms problème mentionnés ici, a également ouvert Github question Ici
- Dans mon cas, le problème était celui-ci, le champ est fortement dactylographié, ne le spécifiant pas,mentionnés ici
- en utilisant
Const
mot clé mentionnés ici
Veuillez lire toutes les réponses ici sur cette page attentivement, je suis sûr que vous pouvez résoudre le problème en utilisant l'une des solutions mentionnées, bonne chance :)
j'ai eu cette erreur en utilisant linq to entities et ma requête linq avait une erreur de syntaxe dans la clause join
pour moi, le problème est survenu après l'ajout d'une étape postbuild qui change assemblyinfo.cs (NetRevisionTool.EXE.) Veillez à ne pas changer AssemblyInfo.cs entre construire et éditer et continuer.
j'ai aussi eu cette exception être jeté dans VB.NET (Visual Studio 2015-Pro), et isolé une seule ligne qui causait l'erreur
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 = ""
Raison: Cette erreur semble être introduit lorsque nous avons quelque chose de bizarre dans notre code. Pour moi, j'ai fait une erreur en obtenant l'utilisateur courant de l'identité.
Code D'Erreur: int currentUserId = User.Identité.GetUserId<>();
Fixe Code: Veuillez spécifier le type de données après GetUserID<---------->();Dans ce cas, j'ai spécifié int.
Remarque: S'il vous plaît essayer de défaire votre code étape par étape afin que vous pouvez trouver ce numéro. Mais sinon, c'était très difficile pour moi de suivre cette erreur.
Merci