C# doesn't generate native DLLs that can be used in such an exploit. You'll need to go with C/C++, Delphi, or ASM (or something else like D). You might want to look into managed C++ which let's you do bad stuff like normal C++ with all the fun of .net (won't work if they don't have .net though). The most you could do with C# is make a comvisible dll and use that for something.
And I found this out, unfortunately, a few details are left out so people without knowledge of the windows shell dll and how exactly link icons are handled are left in the dark. I'm gonna work a bit more on this, and hopefully find something that will work.