CSC:错误CS7038:无法发出模块

Orl*_*mer 24 .net c# visual-studio roslyn visual-studio-2015

安装Visual Studio 2015并构建我的项目后,我收到错误

"CSC:错误CS7038:无法发出模块".

但是我的解决方案在Visual Studio 2013中正常运行.

它是一个ASP.NET webforms项目.NET 4.0

任何人?

更新:看起来问题与Red Gate Smart Assembly结合使用默认值的方法参数有关.

更新: Smart Assembly 6.9为我修复了错误.

Sco*_*ter 14

原始片段:

    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();
    }
Run Code Online (Sandbox Code Playgroud)

改变了这个:

    if (ale.Rows[i].Field<>("FullName") = perp)
Run Code Online (Sandbox Code Playgroud)

对此:

    if (ale.Rows[i].Field<String>("FullName") == perp)
Run Code Online (Sandbox Code Playgroud)


And*_*hov 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修复了一个问题.


Jar*_*Par 6

正如@Andrey报道的那样,这似乎是混淆程序集的问题,这给Roslyn带来了一些困难.今天我能够得到这个错误的实时重现,并且根本原因似乎是混淆器使无效/破坏默认参数值如何存储在元数据中.通过ildasm运行时,默认值将显示为:

.param [3] /* Invalid default value for 0800001F: */
Run Code Online (Sandbox Code Playgroud)

以前版本的编译器通过将无效值视为null或来处理此方案default(T).我们将修复Roslyn以获得相同的行为.


Jol*_*leT 5

我也在VB.NET(Visual Studio 2015 - Pro)中引发了这个异常,并隔离了导致错误的单行.

在下面的代码行中,如果您定义model为整数,如:

Dim model as Integer = 2
Run Code Online (Sandbox Code Playgroud)

然后使用:

Const N As Integer = model
Run Code Online (Sandbox Code Playgroud)

你会抛出异常.

但是,当我将其修改为:

Dim N As Integer = model
Run Code Online (Sandbox Code Playgroud)

没有抛出异常.Const语法是我快速添加模型的另一个程序的遗留代码,并且常量不能设置为预定义的整数类型.