Создание файла .coverage программным способом с помощью Visual Studio 2010 - PullRequest
2 голосов
/ 11 февраля 2011

Мне нужно сгенерировать файл .coverage программным способом. Этот пост объясняет код 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?)

Поскольку в этом посте говорится, что между VS2008 и VS2010 есть некоторые изменения, я думаю, что класс Monitor находится в каком-то другом пространстве имен.

Что может быть не так? Как программно сгенерировать файл .coverage в Visual Studio 2010?

решаемые

  1. Скопируйте файл Microsoft.VisualStudio.Coverage.Monitor.dll из Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PrivateAssemblies \ DataCollectors \ x86

  2. Добавить using Microsoft.VisualStudio.CodeCoverage; в исходный код

  3. Выполнить csc bin2xml.cs /r:Microsoft.VisualStudio.Coverage.Analysis.dll /r:Microsoft.VisualStudio.Coverage.Monitor.dll.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

DLL-библиотека монитора покрытия (Microsoft.VisualStudio.Coverage.Monitor.dll) - это просто прославленная оболочка для vsperfmon.exe. Буквально передаваемые аргументы просто становятся аргументами командной строки для процесса.

Самое простое решение - просто использовать класс Process для запуска vsperfmon.exe самостоятельно (аналогично тому, что вы делаете для vsinstr.exe).

Если вы хотите использовать DLL монитора покрытия, вам нужно добавить ссылку на него. Существует 32- и 64-разрядный vsperfmon.exe (для сбора покрытия кода для 32- и 64-разрядных процессов, соответственно), поэтому существует также 32- и 64-разрядная версия библиотеки DLL монитора покрытия.

Для VS2010 библиотека DLL монитора 32-разрядного покрытия находится в Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors\x86. DLL-библиотека монитора 64-битного покрытия находится в Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors\x64.

Если вы хотите поддерживать сбор данных как в 32-, так и в 64-битных процессах, вам потребуется 32- и 64-битная версия программы сбора, если вы также хотите использовать DLL монитора покрытия (поскольку DLL монитора покрытия не системно-независимый MSIL). Если вы просто создадите процесс vsperfmon.exe самостоятельно, вам потребуется всего одна версия программы сбора данных, чтобы поддерживать как 32-, так и 64-битные процессы.

0 голосов
/ 11 февраля 2011

должно быть частью System.Threading пространства имен, но не в вашем случае

Обновление: это все объясняет http://blogs.msdn.com/b/phuene/archive/2009/12/01/programmatic-coverage-analysis-in-visual-studio-2010.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...