C# 使用%operator时获取InvalidProgrameException

C# 使用%operator时获取InvalidProgrameException,c#,winforms,exception,operators,C#,Winforms,Exception,Operators,在我的Visual Studio 2015中,我创建了一个新的Windows.Forms应用程序(不是控制台应用程序),除了在自分配+或-操作中使用%运算符添加两行代码外,我什么也不做(例如,使数字为偶数)。当我使用“优化代码”(这是默认设置)作为发布版本启动此版本时,结果是InvalidProgrameException 使用系统; 使用System.Windows.Forms; 命名空间Windows窗体应用程序1 { 静态类程序 { /// ///应用程序的主要入口点。 /// [状态

在我的Visual Studio 2015中,我创建了一个新的Windows.Forms应用程序(不是控制台应用程序),除了在自分配+或-操作中使用%运算符添加两行代码外,我什么也不做(例如,使数字为偶数)。当我使用“优化代码”(这是默认设置)作为发布版本启动此版本时,结果是InvalidProgrameException

使用系统;
使用System.Windows.Forms;
命名空间Windows窗体应用程序1
{
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
int a=0,b;
a+=a%2;//b=a+a%2;也会崩溃。
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form1());
}
}
}
再次声明:只有在启动发布版本时才会崩溃。只要我在构建设置中取消选中“优化代码”,它就可以正常工作,因此显然优化器会混淆代码。稍微更改代码会使事情工作或不工作,具体取决于代码。我检查了各种框架版本(2.0到5.4.1),所有的地方都是一样的。这不仅发生在上面的例子中——我在常规代码中的某个大型表单应用程序中也遇到了这种情况

当然,以目前不会崩溃的方式重新排列代码是很容易的。但我非常想了解这个问题,因为如果发生这种情况,你怎么能对%operator感到安全呢


我在网上搜索了很多关于这个问题的信息,但是没有找到任何关于它的信息。如果这里有人能证实这个问题或者告诉我我有幻觉,我会很高兴的。所有的罚款,因为现在我觉得完全失去了。< / P>刚刚测试了你张贴的代码,它根本没有崩溃…你编译任何CPU,x86或x64?没有什么“不安全”关于<代码> %>代码>运算符-你得到了一个不同的原因的错误。也许相关:考虑,并删除
Form1
相关内容:您能否仅使用
Main()
正文中的前两行重新编程?它是否仅在
vshost
ed时发生,或者在从shell启动发布exe时发生?当
a
为非零时是否也会发生这种情况?
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            int a = 0, b;
            a += a % 2; // b = a + a % 2; also crashes.
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}