Generating .coverage file programmatic way with Visual Studio 2010

徘徊边缘 提交于 2019-12-10 10:58:37

问题


I need to generate .coverage file programmatic way. This post explains a C# code to do it as follows.

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);

Unfortunately, when I compile this code, I get the following error.

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?)

As this post says, there are some changes between VS2008 and VS2010, I think the Monitor class is in some different namespace.

What might be wrong? How can I generate the .coverage file programmatically with Visual Studio 2010?

SOLVED

  1. Copy the Microsoft.VisualStudio.Coverage.Monitor.dll from Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors\x86

  2. Add using Microsoft.VisualStudio.CodeCoverage; in the source code

  3. Run csc bin2xml.cs /r:Microsoft.VisualStudio.Coverage.Analysis.dll /r:Microsoft.VisualStudio.Coverage.Monitor.dll.

回答1:


The coverage monitor DLL (Microsoft.VisualStudio.Coverage.Monitor.dll) is really just a glorified wrapper around vsperfmon.exe. Literally, the arguments you pass in just become command-line arguments to the process.

The easiest solution is to just use the Process class to run vsperfmon.exe yourself (similar to what you're doing for vsinstr.exe).

If you want to use the coverage monitor DLL, you need to add a reference to it. There is a 32- and 64-bit vsperfmon.exe (for collecting code coverage against 32- and 64-bit processes, respectively), so there is also a 32- and 64-bit version of the coverage monitor DLL.

For VS2010, the 32-bit coverage monitor DLL lives in Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors\x86. The 64-bit coverage monitor DLL lives in Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors\x64.

If you want to support collection on both 32- and 64-bit processes, you'll need to have a 32- and 64-bit version of your collection program if you also want to use the coverage monitor DLL (since the coverage monitor DLL is not system-agnostic MSIL). If you just create the vsperfmon.exe process yourself, you'd only need to have one version of your collection program to support both 32- and 64-bit processes.




回答2:


it should be part of System.Threading namespace, but not in your case

Update: this explains it all http://blogs.msdn.com/b/phuene/archive/2009/12/01/programmatic-coverage-analysis-in-visual-studio-2010.aspx



来源:https://stackoverflow.com/questions/4965173/generating-coverage-file-programmatic-way-with-visual-studio-2010

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!