SCC : erreur CS7038: Impossible d'émettre 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 est de construire correctement dans Visual Studio 2013.
C'est un ASP.NET webforms projet .NET 4.0
Quelqu'un?
Mise à JOUR: il semble que le problème a à voir avec la Porte Rouge Smart Montage en combinaison avec la méthode des paramètres avec des valeurs par défaut.
Mise à JOUR: Smart Assemblée 6.9 corrige l'erreur pour moi.
- Il n'y a vraiment pas plus tôt les messages d'erreur liés à cela? Si non, pouvez-vous essayer de créer un MCVE? Nous ne savons même pas (à ce point) quel est le type de projet que vous êtes en train de construire.
- Sonne comme un bug dans Roslyn pour moi. Si c'est pas un bug de compilation de votre projet, que c'est un bug en prononçant un utile message d'erreur. Peut-être essayer github.com/dotnet/roslyn/issues
- C'est un ASP.NET webforms projet .NET 4.0
Vous devez vous connecter pour publier un commentaire.
Eu la même erreur (frais d'installation de la VS2015 de l'Entreprise, ASP.NET webforms projet .NET 4.0).
Après quelques recherches, j'ai trouvé qu'il y a deux Dll dans les références qui sont les causes de cette. Les deux sont .Net 2.0 assemblées et deux d'entre eux obscurci par Porte Rouge Smart Assemblée 6.5. Et la vraie raison est... de la dissimulation de l'.
Heureusement, ces assemblées sont les miennes, j'ai donc essayé de construire sans l'aide de Smart Assemblée de l'erreur a disparu.
Intéressant, c'est que pas toutes les erreurs ou les avertissements indiqués par Visual Studio avant d'essayer de construire un projet.
Bonne chance!
MODIFIER: la mise à Jour de Smart Assemblée à la version 6.9 correction d'un problème.
Original Extrait De:
Changé cela:
À Ceci:
Comme @Andrey signalé ce ne semble pas être un problème occulté les assemblys qui est à l'origine de certaines difficultés pour Roslyn. Aujourd'hui, j'ai été en mesure d'obtenir un live repro de cette erreur et la cause semble être la obfuscator est d'invalider /corrompre comment les valeurs de paramètre par défaut sont stockées dans les métadonnées. Lorsqu'il est exécuté par ildasm les valeurs par défaut sera affiché comme:
La précédente version du compilateur traités de ce scénario par le traitement de la valeur non valide, comme
null
oudefault(T)
. Nous serons de fixation Roslyn à avoir le même comportement.J'ai aussi eu cette exception levée dans VB.NET (Visual Studio 2015 - Pro), et isolé une seule ligne qui a été la cause de l'erreur.
Dans la ligne de code ci-dessous, si vous définissez
model
comme un entier, comme dans:et ensuite utiliser:
vous permettra de lancer l'exception.
Cependant, quand j'ai modifié cela:
l'exception n'a pas été levée. Le Const syntaxe a été l'héritage de code à partir d'un autre programme que j'ai rapidement ajouté modèle, et les constantes ne peuvent pas être pré-défini les types d'entiers.
Find
sur le projet deConst
et recherche par le biais de ces à éliminer 'calculé' constsS'étendant sur la réponse de @jony-adamit:
J'ai aussi eu cette erreur de compilation d'être jeté en C# (Visual Studio 2015). Il est venu vers le bas pour les différences dans le compilateur de sortie de .NET 4.5 et Roslyn le nouveau compilateur dans VS2015. Vous pouvez prendre le code ci-dessous et exécutez vous-même ou utiliser dotnetfiddle (https://dotnetfiddle.net/fa2rMs) et de basculer entre les compilateurs.
Dans .NET 4.5 compilateur (compilateur C# version 12.0 ou plus tôt), vous obtenez ce message:
Dans le Roslyn 1.0.0 et 1.1.0 des versions de compilateur, vous obtenez ce message:
Code de reproduire l'erreur (avis de l'espace de noms):
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 précédent compilateur pointu vous à l'endroit exact de commencer l'examen de votre code.
Une autre grande différence est le précédent compilateur va vous montrer une erreur de syntaxe dans Visual Studio pour ce scénario, mais malheureusement Roslyn (atm) ne fonctionne pas. Toutefois, si vous savez où chercher et vous planait votre souris sur le " x " de la variable dans le linq to sql, vous verriez que Rosyln ne comprend pas comment l'interpréter.
J'obtenais une erreur similaire: "BC36970. Pas réussi à émettre module 'Something.dll'." Je me rends compte que le code d'erreur n'est pas la même mais c'est aussi un "échec à émettre" type de problème donc j'ai pensé que je devais partager ma réponse.
Problème: Mon problème était que j'avais une chaîne qui a été un constante mais j'ai essayé d'ajouter une autre corde, comme (à l'aide de code VB):
Solution: j'ai simplement eu à convertir la deuxième chaîne de Const Dim et l'erreur a disparu:
Je viens d'avoir "Échoué à émettre de module". J'ai malencontreusement mis des parenthèses vides dans un appel à une extension générique de la méthode, seulement à l'intérieur d'un opérateur ternaire, comme ceci:
(En dehors d'un ternaire op, je viens de faire régulièrement de l'erreur CS7003: usage Inattendu d'un indépendant nom générique.)
Je reçois le même "impossible d'émettre le module de l'erreur avec ce code, mais en changeant le "Const" à "Dim" résout le problème:
Il y a un autre bug qui peut provoquer cette erreur exact:
Qui m'est arrivé après un changement de nom de la propriété sans refactoring, qui ont causé des linq code pour appeler la espace de noms lui-même!
Pour voir le bug en action tout ce que vous avez à faire est d'exécuter ce morceau de code:
Où ConsoleApplication5 est l'espace de noms!
Cela se produit uniquement dans VS2015.
Mise à jour:
Il y a un question pour ce désormais sur GitHub si ça intéresse quelqu'un.
J'ai eu cette erreur lorsque je travaillais avec les données de la table et de ne pas fournir un type de données où il a été nécessaire:
En lui donnant un bon type de données se débarrasser de l'erreur. J'ai eu aussi de les convertir en string pour pouvoir comparer correctement
J'ai eu cette erreur trop, on dirait qu'il ya quelques raisons principales à l'origine de 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
Const
mot-clé, mentionné iciVeuillez 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 🙂
Cette réponse est similaire à celle posté par @wrtsvkrfm
Ce sera la cause de la DLL pour ne pas être émis,
Modifier les 2 lignes de
et l'erreur disparaît.
Ce doit être une erreur de compilation.
CONST clairement cant dépendent d'une variable, qui peut..., bon..., varier. 🙂
J'ai eu cette erreur lors de l'utilisation d'une méthode générique, mais à défaut de comprendre le type.
Ce code a donné le message d'erreur:
Correction n'était tout simplement de spécifier le type:
Je ne suis pas sûr si le erroring exemple est une syntaxe valide ou pas: je m'attendais à une erreur de syntaxe si elle n'est pas plutôt que cette erreur, et Intellisense accepté la syntaxe.
J'ai eu cette erreur lors de l'utilisation de linq to entities et ma requête linq avait une erreur de syntaxe dans la clause de jointure
Pour moi le problème s'est produite après l'ajout d'un postbuild étape que les changements de la assemblyinfo.cs (NetRevisionTool.exe).
Prendre soin de ne pas modifier le AssemblyInfo.cs entre la construction et de Modifier et de continuer.
J'ai aussi eu cette exception levée dans VB.NET (Visual Studio 2015 - Pro), et isolé une seule ligne qui a été la cause de l'erreur
Raison:
Cette erreur semble être introduit lorsque nous avons quelque chose de bizarre dans notre code.
Pour moi, j'ai fait une erreur lors de l'obtention de l'utilisateur actuel de l'identité.
Code D'Erreur:
int currentUserId = Utilisateur.L'identité.GetUserId<>();
Code Fixe:
Veuillez spécifier le type de données après GetUserID<---------->();Dans ce cas, j'ai spécifié int.
Note
S'il vous plaît essayer d'annuler votre code, étape par étape, de sorte que vous pouvez trouver ce numéro. Mais sinon, c'était très difficile pour moi de suivre cette erreur.
Grâce
Cela peut se produire pour toute erreur que le compilateur n'a pas l'attraper. Probablement
En tout cas, ce
CS7038
se produit parce que le C# est valide et il ya une bonne chance que le compilateur a rencontré une erreur dans un cadre inattendu qu'il n'est plus en mesure de retracer toute ligne de code source que vous avez écrit. Donc apparemment aléatoire des erreurs que les gens signalent ici à cause de cela.J'ai utilisé le C# depuis des décennies et j'arrive ici, maintenant, parce que c'est la première fois que j'obtiens une erreur comme ça.
Dans mon cas, le code suivant génère l'erreur. Utilisation
<LangVersion>Preview</LangVersion>
dans le fichier de projet et d'utiliser le C# 8 compilateur de Visual Studio 2019 aperçu.Assez bizarre, si vous modifiez la déclaration et l'affectation à lire, comme
var temp
au lieu de cela, tout fonctionne bien.