安装Visual Studio 2015并构建项目后,我收到错误
" CSC:错误CS7038:无法发出模块"。
但是我的解决方案在Visual Studio 2013中正常运行。
这是一个ASP.NET webforms项目.NET 4.0
任何?
更新:看起来问题与Red Gate Smart Assembly结合使用默认值的方法参数有关。
更新:Smart Assembly 6.9为我修复了错误。
答案 0 :(得分:12)
Original 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();
}
改变了这个:
if (ale.Rows[i].Field<>("FullName") = perp)
To This:
if (ale.Rows[i].Field<String>("FullName") == perp)
答案 1 :(得分:7)
得到了同样的错误(VS2015 Enterprise,ASP.NET webforms项目.NET 4.0的全新安装)。
经过一番调查后,我发现引用中有两个DLL导致这种情况。两者都是.Net 2.0程序集,它们都被 Red Gate Smart Assembly 6.5 混淆了。真正的原因是...... 混淆。
幸运的是,这些装配是我的,所以我试图在不使用Smart Assembly的情况下构建它们 - 错误消失了。
有趣的是,在尝试构建项目之前,Visual Studio没有显示任何错误或警告。
祝你好运!编辑:将智能装配更新到版本6.9修复了一个问题。
答案 2 :(得分:6)
正如@Andrey报道的那样,这似乎是混淆程序集的一个问题,这对Roslyn造成了一些困难。今天我能够得到这个错误的实时重现,并且根本原因似乎是混淆器使无效/破坏默认参数值如何存储在元数据中。通过ildasm运行时,默认值将显示为:
.param [3] /* Invalid default value for 0800001F: */
以前版本的编译器通过将无效值视为null
或default(T)
来处理此方案。我们将修复Roslyn以获得相同的行为。
答案 3 :(得分:5)
我也在VB.NET(Visual Studio 2015-Pro)中引发了这个异常,并隔离了导致错误的单行。
在下面的代码行中,如果将model
定义为整数,如:
Dim model as Integer = 2
然后使用:
Const N As Integer = model
你会抛出异常。
然而,当我将其修改为:
Dim N As Integer = model
没有抛出异常。 Const语法是我快速添加模型的另一个程序的遗留代码,并且常量不能设置为预定义的整数类型。
答案 4 :(得分:3)
扩展@ jony-adamit的答案:
我也在C#(Visual Studio 2015)中抛出了这个编译错误。它归结为.NET 4.5和Roslyn的编译器输出与VS2015中的新编译器的差异。您可以使用以下代码并自行运行或使用dotnetfiddle(https://dotnetfiddle.net/fa2rMs)并在编译器之间切换。
在.NET 4.5编译器(C#编译器版本12.0或更早版本)中,您收到以下消息:
编译错误(第16行,第7行):类型或命名空间名称 命名空间“Tools.Weapons”中不存在“选择”(是吗? 缺少装配参考?)
在Roslyn 1.0.0和1.1.0编译器版本中,您收到以下消息:
编译错误(第1行,第1列):无法发出模块 'MyAssembly程序'。
重现错误的代码(注意命名空间):
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 { }
}
正如您从编译器消息中可以看出的那样,Roslyn的消息让您猜测编译器错误的内容和位置。根据应用程序的大小,缺少细节可能需要数天或数周才能找到根本原因。而前一个编译器中的消息指向您开始查看代码的确切位置。
另一个很大的区别是之前的编译器会在Visual Studio中为您显示这种情况的语法错误,但不幸的是Roslyn(atm)没有。但是,如果您知道在哪里查看并将鼠标悬停在linq to sql语句中的'x'变量上,那么您会看到Rosyln不理解如何解释它。
答案 5 :(得分:3)
我收到了类似的错误:“ BC36970。无法发出模块'Something.dll'。”我发现错误代码不一样,但它也是“无法发出”类型问题所以我想我会分享我的答案。
问题:我的问题是我有一个常量的字符串,但我试图在其中附加另一个字符串,就像这样(使用VB代码):
Dim MyString1 As String = "Test1"
Const MyString2 As String = "Test2" & MyString1
解决方案:我只需将第二个字符串从 Const转换为Dim ,错误就消失了:
Dim MyString1 As String = "Test1"
Dim MyString2 As String = "Test2" & MyString1
答案 6 :(得分:3)
我刚刚&#34;无法发出模块&#34;。我错误地将空括号放在对通用扩展方法的调用中,只有在三元运算符内部时才会这样:
var a = b == 6 ? 8 : x.Foo<>();
(在三元操作之外,我只是得到常规错误CS7003:意外使用未绑定的通用名称。)
答案 7 :(得分:1)
我也遇到了这个错误,似乎有一些主要原因会导致此错误。
我发布了这个答案,总结了所提到的解决方案并帮助其他人,以便他们能够快速解决此错误
Const
关键字mentioned here 请仔细阅读本页的所有答案,我相信您可以使用上述解决方案解决问题,祝您好运:)
答案 8 :(得分:1)
使用通用方法时出现此错误但未包含类型。
此代码给出了错误:
example.GetValue<>(foo);
更正只是指定类型:
example.GetValue<string>(foo);
我不确定错误示例是否是有效的语法:如果不是这个错误,我本来期望语法错误,并且Intellisense接受语法。
答案 9 :(得分:1)
这个答案与@wrtsvkrfm
发布的答案类似 'Dim NEWLINE As String = "<BR/>"
Dim NEWLINE As String = vbCrLf
Const HT_QTC_VENDOR As String = "<B>some stuff {0}</B>" & NEWLINE
这将导致不发出DLL,
将前2行更改为
'Const NEWLINE As String = "<BR/>"
Const NEWLINE As String = vbCrLf
并且错误消失了。 这应该是编译错误。 CONST显然不能依赖于变量,这可能......,......,变化。 : - )
答案 10 :(得分:1)
我在使用数据表时遇到此错误,并且未提供所需数据类型:
bool temp = dtTab.AsEnumerable().Any(row => row.Field<>("active") == 1);
给它一个正确的数据类型摆脱了错误。我还必须将其转换为字符串才能正确比较它 -
bool temp = dtTab.AsEnumerable().Any(row => row.Field<Boolean>("active").toString() == "1");
答案 11 :(得分:1)
我使用此代码得到相同的“无法发出模块”错误,但将“Const”更改为“Dim”可以解决问题:
Dim userStatus1 As String = convAttrSet("user_status")
Dim userStatus2 As String = convAttrSet("user_status")
Const PENDING As Boolean = (userStatus1 = userStatus2)
答案 12 :(得分:1)
还有另一个可能导致此错误的错误:
在没有重构的情况下更改属性名称后发生在我身上,这导致一些linq代码调用命名空间本身!
要查看操作中的错误,您只需运行以下代码:
public static int Test()
{
var x = from c in ConsoleApplication5
select 3;
return x.First();
}
其中 ConsoleApplication5 是命名空间!
这只发生在VS2015中。
<强>更新强>
如果有人感兴趣的话,GitHub现在有一个issue。
答案 13 :(得分:0)
使用linq实体时出现此错误,我的linq查询在join子句中出现语法错误
答案 14 :(得分:0)
对我来说,在添加更改assemblyinfo.cs(NetRevisionTool.exe)的postbuild步骤后发生了这个问题。 注意不要在构建和编辑之间更改AssemblyInfo.c并继续。
答案 15 :(得分:0)
我也在VB.NET(Visual Studio 2015 - Pro)中抛出此异常,并隔离了导致错误的单行
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 = ""
答案 16 :(得分:0)
原因: 当我们的代码中有些奇怪的东西时,似乎会引入此错误。 对我来说,在使当前用户成为身份时我犯了一个错误。
错误代码: int currentUserId = User.Identity.GetUserId <>();
固定代码: 请在GetUserID <---------->()之后指定数据类型;在这种情况下,我已经指定了int。
注意 请尝试逐步撤消您的代码,以便您可以找到此问题。但是否则我很难跟踪该错误。
谢谢
答案 17 :(得分:0)
对于编译器未捕获的任何错误,都可能发生这种情况。大概
在任何情况下,发生此CS7038
的原因是C#有效,并且编译器很有可能在意想不到的位置遇到错误,以致其不再能够将其跟踪到任何源代码行中你写了。因此,人们在这里报告的看似随机的错误导致了这种情况。
我使用C#已有数十年了,现在到达这里是因为这是我第一次遇到这样的错误。
就我而言,以下代码会产生错误。在项目文件中使用<LangVersion>Preview</LangVersion>
,并在Visual Studio 2019预览版中使用C#8编译器。
void FailToEmitDll(ReadOnlySpan<char> span) {
ReadOnlySpan<char> temp;
temp = 1 switch
{
_ => span
};
}
奇怪的是,如果将声明和赋值更改为类似于var temp
,则一切正常。
答案 18 :(得分:0)
添加到可能的原因列表中,在使用C#8的VS2019中,执行以下操作时,我收到“无法发出模块”消息:
_ = someBool ? SomeVoid() : default;
我在此处提交了有关此问题的错误报告:https://github.com/dotnet/roslyn/issues/41741