Well, Visual3D.NET now has own implementation, which WORKS and doesn't parse IL. It provide fast code generation on-the-fly and caches compiled shader's microcode, so you could prebuild all possible combinations of input conditions (like #defines in pure HLSL) and run those shaders without compile even single line of HLSL code.
Moreover, this approach (call it #SL) allow developers to use entire set of OOP features provided by C#/.NET 2.0, like generics, interfaces, virtual method calls, if/for/while operators etc. in order to achieve maximum reusability and consistency within your shaders written in C#.
By now, this toolset (codegen, base Shader class, basic 'HLSL' types and service classes) is used internally by Visual3D, in order to replace Ogre-like materials and increase performance by grouping multiple passes together etc, but you can see nice "Use C# shaders" checkboxes in several areas of Light Demo Scene in the latest release (beta 1.2.3).
P.S. this is not a joke, check it out yourself: http://www.visual3d.net
P.S(2) it's already a part of V3D SDK, and you can play with #SL by creating own RenderMaterial-based class and using Shader-derived shaders in it. You can see examples of ready-to-use materials in Reflector (by now), lookup for AmbientMaterial, PerPixelMaterial and EnvMapMaterial in Visual3D.Graphics3D namespace of Visual3D.Engine.dll; all shaders which are used there are contained in Visual3D.Shaders namespace and are derived from BasicShader class (which derives from Shader class) and in Visual3D.Shaders.Extensions namespace.
P.S(3) remember about copyright etc ;)