0

我正在使用 MSBuild 引擎在 Team Server 数据库项目上运行部署:

var propertyGroup = new BuildPropertyGroup();
propertyGroup .SetProperty("Configuration", "Release");
propertyGroup .SetProperty("TargetDatabase", <databasename>);
propertyGroup .SetProperty("UseSandboxSettings", "false");
propertyGroup .SetProperty("DeployToDatabase", "true");
propertyGroup .SetProperty("TargetConnectionString", LocalHostConnectionString);
new Engine().BuildProjectFile(<DBProjFile>, new[] { "Rebuild", "Deploy" }, propertyGroup);

这是在一套单元测试的设置夹具中运行的。当使用 Resharper 运行时,设置会在合理的时间内运行,但是如果我调试测试,我会在调试输出中得到大量的跟踪噪音。大多数消息都以详细级别记录。

我回顾了一些涉及的程序集,发现在静态类 Microsoft.Data.Schema.Common.Diagnostics.TSDTrace、Microsoft.Data.Schema.Utilities 中创建了一个名为“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 始终为真。我在跳,我错过了一些东西。最终我想从代码中禁用它,但我会接受涉及应用程序配置的解决方案。

编辑

我犯了一个错误,跟踪源实际上是我在上面修改过的“TSData”。我在 app.config 中将日志级别设置为 Off,这阻止了输出出现在 Debug 输出中,但速度仍然相同。看来这个问题更具体到我正在尝试做的事情,所以我在原始问题中添加了更多细节。

4

1 回答 1

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"});
}
于 2011-07-27T10:57:33.357 回答