我需要以编程方式生成.coverage文件。 This post解释了C#代码,如下所示。
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using Microsoft.VisualStudio.Coverage;
using Microsoft.VisualStudio.Coverage.Analysis;
// You must add a reference to Microsoft.VisualStudio.Coverage.Monitor.dll
namespace Microsoft.VisualStudio
{
class DumpProgram
{
static void Main(string[] args)
{
Process p = new Process();
StringBuilder sb = new StringBuilder("/COVERAGE ");
sb.Append("hello.exe");
p.StartInfo.FileName = "vsinstr.exe";
p.StartInfo.Arguments = sb.ToString();
p.Start();
p.WaitForExit();
// TODO: Look at return code – 0 for success
// A guid is used to keep track of the run
Guid myrunguid = Guid.NewGuid();
Monitor m = new Monitor();
m.StartRunCoverage(myrunguid, "hello.coverage");
// Complete the run
m.FinishRunCoverage(myrunguid);
不幸的是,当我编译这段代码时,我收到以下错误。
bin2xml.cs(26,22): error CS0246: The type or namespace name 'Monitor' could not be found (are you
missing a using directive or an assembly reference?)
bin2xml.cs(26,38): error CS0246: The type or namespace name 'Monitor' could not be found (are you
missing a using directive or an assembly reference?)
正如this post所说,VS2008和VS2010之间有一些变化,我认为Monitor类在一些不同的命名空间中。
可能有什么问题?如何使用Visual Studio 2010以编程方式生成.coverage文件?
从Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PrivateAssemblies \ DataCollectors \ x86
在源代码中添加using Microsoft.VisualStudio.CodeCoverage;
csc bin2xml.cs /r:Microsoft.VisualStudio.Coverage.Analysis.dll /r:Microsoft.VisualStudio.Coverage.Monitor.dll
。答案 0 :(得分:2)
覆盖率监视器DLL(Microsoft.VisualStudio.Coverage.Monitor.dll
)实际上只是vsperfmon.exe的一个美化包装器。从字面上看,你传入的参数只是成为进程的命令行参数。
最简单的解决方案是使用Process
类自己运行vsperfmon.exe(类似于您为vsinstr.exe所做的操作)。
如果要使用coverage监视器DLL,则需要添加对它的引用。有一个32位和64位vsperfmon.exe(分别用于收集32位和64位进程的代码覆盖率),因此还有32位和64位版本的coverage监视器DLL。
对于VS2010,32位覆盖率监视器DLL位于Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors\x86
。 64位覆盖率监视器DLL位于Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors\x64
。
如果您想支持32位和64位进程的集合,如果您还想使用coverage监视器DLL,则需要拥有32位和64位版本的集合程序(因为coverage监视器DLL 不系统无关MSIL)。如果您只是自己创建vsperfmon.exe进程,则只需要一个版本的集合程序来支持32位和64位进程。
答案 1 :(得分:0)
它应该是System.Threading
命名空间的一部分,但不是你的情况