我遇到了一段代码的问题,该代码的行为不同,具体取决于它是在 Visual Studio 的 Release 还是 Debug 配置中编译的。我已经手动更改了在 Release 配置中可以看到的所有项目编译设置,使其与 Debug 匹配,但问题仍然存在。
代码(如下)返回执行程序集的 Guid:
private static Guid GetApplicationUid()
{
Assembly assembly = Assembly.GetCallingAssembly();
GuidAttribute attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), false)[0];
return new Guid(attribute.Value);
}
该方法因“索引超出数组范围”而失败。在 Release 模式下编译后执行时出现异常。它在调试模式下正常工作。这是因为在此配置中,由 GetExecutingAssembly() 创建的程序集引用是临时程序集(例如,App_Web_eelfd0ff,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null),而不是底层的“真实”程序集。
奇怪的是,我有另一个组件在同一个 Web 中运行,它使用相同的代码并且行为相同,无论编译模式如何。
为什么会发生这种情况以及如何预防?