◆ 実際の型の拡張メソッドは検索されないみたい

dynamic 型を使っていた時に拡張メソッドを使おうとしたらエラーになりました
static class Extension
{
    public static string s(this string str)
    {
        return str;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var str = "abcd";
        Console.WriteLine(str.s());

        dynamic dstr = "abcd";
        Console.WriteLine(dstr.s());
    }
}

このコードでは dstr.s() のところで
'string' に 's' の定義がありません

と言われます

中身が string でも dynamic 型は string じゃなく dynamic 型なので string の拡張メソッドが検索されないんでしょう

絶対その型なのが決まっているならキャストするか
Console.WriteLine(((string)dstr).s());

拡張メソッド形式じゃなく static メソッドの呼び出しにすれば実行できます
Console.WriteLine(Extension.s(dstr));