2011-06-22 5 views
0

私はチームServerデータベースプロジェクトの展開を実行するためのMSBuildエンジンを使用していますよりもかなり長いデバッグ中です単体テストのスイートの場合Resharperを使用して実行すると、セットアップは妥当な時間内に実行されますが、テストをデバッグすると、デバッグ出力にトレースノイズが発生します。ほとんどのメッセージは冗長レベルで記録されます。ビルデータベースプロジェクトの展開がリリース

私は関連するアセンブリの一部を反映し、静的クラスMicrosoft.Data.Schema.Common.Diagnostics.TSDTrace、Microsoft.Data.Schemaで作成された "TSData"という名前のTraceSourceがあることを発見しました。ユーティリティー。

私がデバッグウィンドウに表示されて任意の出力を停止したが、実行時間が影響を受けませんしているのapp.configに以下を適用しようとしている

<system.diagnostics> 
    <sources> 
     <source name="TSData" switchName="foo" /> 
    </sources> 
    <switches> 
     <add name="foo" value="Off"/> 
    </switches> 
</system.diagnostics> 

ログクラスでは、この小さな宝石があります:

if (TSDTrace.Settings._traceIfDebuggerAttached && Debugger.IsAttached) 
{ 
    TSDTrace.Settings._traceToDebugOutput = true; 
    TSDTrace.Settings._traceLevel = TraceLevel.Verbose; 
} 

ここで_traceIfDebuggerAttachedは常にtrueです。私は何かを逃したことを跳ねている。最終的に私はコードからこれを無効にしたいと思いますが、私はappの設定を含む解決策に取り組みます。私はミスを犯していた

EDIT

は、トレースソースで、実は私は上記改正している「TSData」です。私は出力をデバッグ出力に現れないようにしたapp.configでログレベルをOffに設定しましたが、速度は変わりません。この問題は、私がやろうとしていることに固有のものであると思われるので、元の質問に詳細を追加しました。

答えて

0

Microsoft.Build.BuildEngine.Engineは廃止されているようですが、代わりにMicrosoft.Build.Evaluation.ProjectCollectionを使用していたはずです。

新しいオブジェクトを使用するようにコードを変更したところ、すべての処理がはるかに高速で、ログファイルのシステム診断によってログを無効にする必要はありません。コードは次のようになります。

var properties = new Dictionary<string, string> 
    { 
     {"Configuration", isDebug ? "Debug" : "Release"}, 
     {"TargetDatabase", databaseName}, 
     {"UseSandboxSettings", "false"}, 
     {"DeployToDatabase", "true"}, 
     {"TargetConnectionString", LocalHostConnectionString} 
    }; 

using (var engine = new ProjectCollection(properties)) 
{ 
    engine.RegisterLogger(new ConsoleLogger()); 

    engine 
     .LoadProject(databaseProjectFileName, "4.0") 
     .Build(new[] {"Build", "Deploy"}); 
} 
関連する問題