As MSDN mentions:
The code in a Finally block runs after a Return statement in a Try or Catch block is encountered, but before that Return statement executes. In this situation, a Return statement in the Finally block executes before the initial Return statement. This gives a different return value. To prevent this potentially confusing situation, avoid using Return statements in Finally blocks.
As I didn't understand a lot from this note, I'll take an example (VB.NET, I think in C# is the situation is similar):
Try
HugeOp()
Return "OK"
Catch
Return "NOK"
Finally
Return "Finally"
End Try
Now, why should be this illegal in both C# and VB.NET?