解決したけど原因はよくわからない。忘れないように書いておく。というか忘れてた。

Visual Studio 2010 で発生しました。
確認してみたところ Visual Studio 2012 RC でも同様です。

アセンブリ Foo に XAML ファイルがあり、同じアセンブリ内の名前空間 BarNS 内にカスタムクラス Bar があるとする。
namespace BarNS
{
    public class Bar : ContentControl
    {
        public Bar()
        {
            // ごにょごにょ
        }
        // ごにょごにょ
    }
}
MSDN の XAML 名前空間および WPF XAML の名前空間の割り当て によると、
clr-namespace:(名前空間名);assembly=(アセンブリ名)
のようにして XML 名前空間を指定すればいいようなので指定します。
<Bar xmlns="clr-namespace:BarNS;assembly=Foo" />
こうするとデザイナでは問題なく動いています。
しかし、ビルドすると
タグ 'Bar' は、XML 名前空間 'clr-namespace:BarNS;assembly=Foo' にありません。
とか言われます。
ここで、先ほどの MSDN のページを見直すと
assembly は、参照される clr-namespace がカスタム クラスを参照しているアプリケーション コードと同じアセンブリ内で定義されている場合は省略できます。
とあります。
「省略できます」と書いてるんだから省略してもしなくてもどちらでもいいはずですが、省略してみます。
<Bar xmlns="clr-namespace:BarNS;assembly=" />
または
<Bar xmlns="clr-namespace:BarNS" />
すると、ビルドできました。

なんででしょうかねぇ。