Personally I'm quite a fan of the GOLD Parser Generator. It doesn't generate any code directly, it just gives you the DFA and LALR state tables and lets you write your own parser engine to suit your needs.
This way of structuring things doesn't suit everyone or every situation (you lose some flexibility since your language must be meet LALR restrictions), so I don't claim this as "the right way", but I liked the separation of parsing algorithm from parse rules (and it does mean that any runtime requirements are entirely and easily within your control).
Of course you don't have to write your own engine – there are three engines written in C# listed on the site for example. Off-hand I don't know what licenses those engines use, but writing your own engine is frankly trivial if you find the licences unpalatable. GOLD includes documentation that gives a full description of a working algorithm, which is (as you'd expect if you understand LALR parsing), a simple state machine system. The GOLD program itself is free to use, of course.
GOLD also includes an IDE for writing your language grammar, which can be quite helpful.