Visual Studio 2008のターゲットフレームワーク機能は完全ではない?

What’s New in WPF in the .NET FX 3.5 Beta 2 release – Windows Presentation Foundation User Education
MSDNライブリ
What's New in WPF Version 4.5 | Microsoft Docs

.NET Framework 3.5におけるWPFの機能強化は、上記のblogで紹介されているとおりModelUIElement3DViewport2DVisual3D以外にもたくさんあります。


たとえば、アドイン機能が追加されているのですが、これは「System.AddIn.dll」、「System.AddIn.Contract.dll」、「System.Windows.Presentation.dll」といった.NET Framework 3.5から新たに追加されたアセンブリで提供されています。
そのため、ターゲットフレームワークに3.0を選択しているプロジェクトの場合は、これらのアセンブリ参照を追加することはできません。



当然ながら、これらのアセンブリで提供されるクラスをXAMLやコードの中に記述していればコンパイルが通らないわけです。


ところが、同じく.NET Framework 3.5からの新機能であるModelUIElement3DやViewport2DVisual3Dは、.NET Framework 3.0から存在している「PresentationCore.dll」というアセンブリに含まれています。.NET Framework 3.5をインストールすることで「PresentationCore.dll」が新しいファイルバージョンのものへ上書きされることで、これらの新機能が追加されるかたちになっています。



つまり、ターゲットフレームワークを3.0に設定していても下記のようなXAMLは何の問題もなくコンパイルすることができます。
XAML

<Window x:Class="Window1"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="Window1" Height="300" Width="300">
    <Viewport3D>
        <Viewport2DVisual3D/>
    </Viewport3D>
</Window>


ところが、このコンパイルした実行ファイルを.NET Framework 3.0しかインストールさていない環境で実行すると、XamlParseExceptionが発生します。


これまで.NET Frameworkのサービスパックでは、アセンブリバージョンはそのままでファイルバージョンが更新されてきたため共存ではなく上書きされてきたわけですが、このような大きな機能追加というものは私が知る限りではなかったように思います。今後のVisual Studio 2008で何らかの対策が行われる可能性もありますが、現時点では注意が必要です。