.net - 在 Release模式下编译 silverlight 程序集时缺少 IL 偏移量

标签 .net silverlight il

我关注了these instructions to add IL offsets to Silverlight stack traces 。这在 DEBUG 模式下构建时效果很好,但是我们的生产/qa 构建过程使用 RELEASE 模式编译所有内容,这似乎会丢失 IL 偏移信息。在 Release模式下,所有 IL 偏移量最终均为“0xffffffff”。使用反射器比较调试/发布程序集我注意到 DebuggableAttribute使用方式不同。

调试构建:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: ComVisible(false)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.EnableEditAndContinue | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.Default)]
[assembly: AssemblyConfiguration("Debug")]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows=true)]
[assembly: Extension]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: CompilationRelaxations(8)]
[assembly: TargetFramework("Silverlight,Version=v5.0", FrameworkDisplayName="Silverlight 4")]
[assembly: AssemblyCopyright("Copyright @ Foo Company 2010-2012")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyTitle("Foo.Ria.Bar")]
[assembly: AssemblyCompany("Foo Company")]
[assembly: AssemblyProduct("Foo Product")]

与发布版本:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: ComVisible(false)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows=true)]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyTitle("Foo.Ria.Bar")]
[assembly: AssemblyTrademark("")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: CompilationRelaxations(8)]
[assembly: TargetFramework("Silverlight,Version=v5.0", FrameworkDisplayName="Silverlight 4")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyCompany("Foo Company")]
[assembly: AssemblyProduct("Foo Product")

MSDN says

The DebuggableAttribute class controls how the runtime treats code within the module. The runtime might track extra information about generated code, and it might disable certain optimizations based on the values contained within this attribute.

有人有调整 DebuggableAttribute 的经验吗?设置?是否有任何不涉及完全禁用优化的解决方法( DebuggingModes.DisableOptimizations )?

最佳答案

DebuggableAttribute 由编译器添加来控制 JIT 代码生成。 事实上,当代码应该是可调试的并且某些优化没有发生时,代码的生成方式会有所不同。

如果您需要调整生成的程序集,则需要转储 IL、更改属性并通过以下方式重新编译:ildasm创建一个人类可读的 IL 源代码,可以通过传统的文本编辑器进行更改,而 ilasm用于重新编译回来。

此过程可以在您的构建中自动化。请记住,您正在弄乱编译器生成的东西,并且不应该被触及。

重要提示:如果使用强名称和/ir 验证码,则需要再次对程序集进行签名。

关于.net - 在 Release模式下编译 silverlight 程序集时缺少 IL 偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12264543/

相关文章:

c# - 这个非锁定的 TryGetValue() 字典访问线程安全吗?

c# - 在 Azure 函数中将事件作为参数传递时,TelemetryClient.StartOperation 始终失败

silverlight - 有没有办法在Silverlight中获取可用的磁盘空间?

c# - 绕过变量的影响

.net - ildasm,然后是具有相同元数据的 ilasm

c# - DeleteSubKey UnauthorizedAccessException

c# - 如何创建 WPF 验证规则以确保两个文本字段具有相同的值?

c# - 在 Silverlight 中,如何从模板中获取动画并通过 C# 代码使用它?

silverlight - 为 Windows Phone 7 silverlight 中的控件创建平铺背景图像

c# - CopyToNative 在哪里定义的?