csprojファイルはXMLに他なりません。プログラムで編集するのは、十分に簡単です。
これが私が作成した小さなアプリで、Linq-Xmlを利用して、ルートフォルダーの下にあるすべてのcsprojファイルを検索して更新します。    
var path = @"--Path to Root--";
var files = Directory.GetFiles(path, "*.csproj", SearchOption.AllDirectories);
XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
foreach (var file in files)
{
    var doc = XDocument.Load(file);
    var element = doc.Descendants(ns + "TargetFrameworkVersion").Single();
    element.Value = "v4.5";
    doc.Save(file);
}
これをtfsとしてタグ付けしているため、読み取り専用フラグを削除するために、すべてのcsprojファイルに対してチェックアウトを実行する必要がある場合があります。または、すべてをチェックアウトしてtfpt uuから、変更されていないファイルを元に戻すために使用します。