Roslyn 中的重大更改列表

List of breaking changes in Roslyn

切换到 Visual Studio 2015 后,我们注意到 Roslyn 中对 lambda 编译为 MSIL 的方式所做的一些更改(在 and on GitHub 中描述)在某些情况下引入了运行时故障。

由于 Roslyn 显然是 .NET 的未来,我们想切换到这项技术,但似乎所有遗留代码都已 运行 投入生产(并且我们有相当程度的确信它能正常工作)现在很容易出现新的运行时故障。这些库也受到此问题的影响(例如 Moq, for example)。

我们已经为 its issues, but I believe Visual Studio 2015 is heavily integrated with Roslyn and I don't think we can simply replace the csc.exe manually (but that's a different question 跳过了对 RyuJIT 的升级。

那么,Roslyn 中是否有一个重大更改的汇编列表,我们可以参考它以了解我们可以期待什么?

(更新)

感谢@NealGafter 提供link。目前可以在此处找到重大更改列表:


似乎有些文档应该在此处:Roslyn Compiler Specification (roslyn/docs/compilers on GitHub)。根据描述:

The compiler specification details the supported (and semi-supported) surface area of the Roslyn VB and C# compilers. This includes

  1. Command-line switches and their meaning
  2. Breaking changes from previous versions of the compilers
  3. Compiler behaviors that are (intentionally) contrary to the specification
  4. Compiler features not described by the language specification
    • COM-specific and other Microsoft-specific features
    • "Well-known" attributes that affect compiler behavior
    • The "ruleset" file syntax and semantics
  5. Features included for interoperability between C# and VB, for example
    • Named Indexers use from C#
  6. Places where the compiler behavior diverges from the language specification
  7. Limitations (e.g. identifier length)
  8. History of language changes per version

描述 CodeGen 关于 lambda 的更改的文档(因为这是我最初的问题)位于 roslyn/docs/compilers/CSharp/CodeGen Differences:

Non-lifting Lambda expressions are now implemented as instance methods on singleton display classes. Since the entry point to the delegate is the instance "Invoke" method, it is cheaper at runtime to dispatch delegate invocations to the underlying implementing method if such method is also an instance method with exactly same formal signature as "Invoke".