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)
得到了同样的错误(VS2015 Enterprise的全新安装,ASP.NET webforms项目.NET 4.0).
经过一些调查后,我发现引用中有两个DLL导致这种情况.两者都是.Net 2.0程序集,它们都被Red Gate Smart Assembly 6.5混淆.而真正的原因是...... 混淆.
幸运的是,这些组件都是我的,所以我试图在不使用Smart Assembly的情况下构建它们 - 错误消失了.
有趣的是,在尝试构建项目之前,Visual Studio没有显示任何错误或警告.
祝好运!
编辑:将智能装配更新到版本6.9修复了一个问题.
正如@Andrey报道的那样,这似乎是混淆程序集的问题,这给Roslyn带来了一些困难.今天我能够得到这个错误的实时重现,并且根本原因似乎是混淆器使无效/破坏默认参数值如何存储在元数据中.通过ildasm运行时,默认值将显示为:
.param [3] /* Invalid default value for 0800001F: */
Run Code Online (Sandbox Code Playgroud)
以前版本的编译器通过将无效值视为null或来处理此方案default(T).我们将修复Roslyn以获得相同的行为.
我也在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语法是我快速添加模型的另一个程序的遗留代码,并且常量不能设置为预定义的整数类型.