MSBuild: Как получить количество повышенных предупреждений?

Я не знаю причину вашей ошибки, но я получил именно эту ошибку, потому что у меня был итератор для вектора, затем я обновил вектор, затем я попытался разыменовать итератор (например, access * myIterator). Я новичок в C ++, но кажется, что если вы измените коллекцию после получения для нее итератора, ваш итератор больше не будет действительным. Вам нужно переназначить свой итератор туда, где он был.

5
задан Abelevich 6 January 2011 в 18:16
поделиться

3 ответа

AFAIK MSBuild не имеет никакой встроенной поддержки для получения количества предупреждения в данной точке сценария сборки. Можно однако выполнить эти шаги для достижения этой цели:

  1. Создайте пользовательский регистратор, который прислушивается к событию предупреждения и считает количество предупреждений
  2. Создайте пользовательскую задачу, которая выставляет [Вывод] свойство WarningCount
  3. Пользовательская задача получает так или иначе значение количества предупреждения от пользовательского регистратора

Самый трудный шаг является шагом 3. Для этого существует несколько опций, и можно свободно искать их под IPC - Процесс Интера Comunication. Следует рабочему примеру того, как можно достигнуть этого. Каждым объектом является различная Библиотека классов.

SharedMemory

http://weblogs.asp.net/rosherove/archive/2003/05/01/6295.aspx

Я создал обертку для именованной общей памяти, которая была частью большего проекта. Это в основном позволяет сериализированным типам и графам объектов быть сохраненными в и полученными от общей памяти (включая то, поскольку Вы ожидали бы перекрестный процесс). Завершается ли больший проект когда-нибудь, другой вопрос ;-).

SampleLogger

Реализует пользовательский регистратор, который отслеживает количество предупреждения.

namespace SampleLogger
{
    using System;
    using Microsoft.Build.Utilities;
    using Microsoft.Build.Framework;
    using DM.SharedMemory;

    public class MySimpleLogger : Logger
    {
        private Segment s;
        private int warningCount;

        public override void Initialize(IEventSource eventSource)
        {
            eventSource.WarningRaised += new BuildWarningEventHandler(eventSource_WarningRaised);

            this.s = new Segment("MSBuildMetadata", SharedMemoryCreationFlag.Create, 65535);
            this.s.SetData(this.warningCount.ToString());
        }

        void eventSource_WarningRaised(object sender, BuildWarningEventArgs e)
        {
            this.warningCount++;
            this.s.SetData(this.warningCount.ToString());
        }

        public override void Shutdown()
        {
            this.s.Dispose();
            base.Shutdown();
        }
    }
}

SampleTasks

Реализует пользовательскую задачу, которая читает количество предупреждений, повышенных в проекте MSbuild. Пользовательская задача читает из общей памяти, записанной пользовательским регистратором, реализованным в библиотеке классов SampleLogger.

namespace SampleTasks
{
    using System;
    using Microsoft.Build.Utilities;
    using Microsoft.Build.Framework;
    using DM.SharedMemory;

    public class BuildMetadata : Task
    {
        public int warningCount;

        [Output]
        public int WarningCount
        {
            get
            {
                Segment s = new Segment("MSBuildMetadata", SharedMemoryCreationFlag.Attach, 0);
                int warningCount = Int32.Parse(s.GetData() as string);
                return warningCount;
            }
        }

        public override bool Execute()
        {
            return true;
        }
    }
}

Ехать прокатиться.

<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Main">
    <UsingTask TaskName="BuildMetadata" AssemblyFile="F:\temp\SampleLogger\bin\debug\SampleTasks.dll" />

    <Target Name="Main">
        <Warning Text="Sample warning #1" />
        <Warning Text="Sample warning #2" />

        <BuildMetadata>
            <Output
                TaskParameter="WarningCount"
                PropertyName="WarningCount" />
        </BuildMetadata>

        <Error Text="A total of $(WarningCount) warning(s) were raised." Condition="$(WarningCount) > 0" />
    </Target>
</Project>

Если Вы выполняете следующую команду:

c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild test.xml /logger:SampleLogger.dll

Это будет выводом:

Microsoft (R) Build Engine Version 2.0.50727.3053
[Microsoft .NET Framework, Version 2.0.50727.3053]
Copyright (C) Microsoft Corporation 2005. All rights reserved.

Build started 30-09-2008 13:04:39.
__________________________________________________
Project "F:\temp\SampleLogger\bin\debug\test.xml" (default targets):

Target Main:
    F:\temp\SampleLogger\bin\debug\test.xml : warning : Sample warning #1
    F:\temp\SampleLogger\bin\debug\test.xml : warning : Sample warning #2
    F:\temp\SampleLogger\bin\debug\test.xml(15,3): error : A total of 2 warning(s) were raised.
Done building target "Main" in project "test.xml" -- FAILED.

Done building project "test.xml" -- FAILED.

Build FAILED.
F:\temp\SampleLogger\bin\debug\test.xml : warning : Sample warning #1
F:\temp\SampleLogger\bin\debug\test.xml : warning : Sample warning #2
F:\temp\SampleLogger\bin\debug\test.xml(15,3): error : A total of 2 warning(s) were raised.
    2 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.01
7
ответ дан 14 December 2019 в 01:21
поделиться

Компилятор C# (csc.exe) имеет желание переключателя/warnaserror, будет рассматривать предупреждения как ошибки и приводить сборку к сбою. Это также доступно как установка в .csproj файле. Я предполагаю, что Delphi имеет подобную способность.

1
ответ дан 14 December 2019 в 01:21
поделиться
msbuild.exe %~nx1 /t:Rebuild /p:Configuration=Release >> %MrB-BUILDLOG%
findstr /r /c:"[1-9][0-9]* Error(s)" >> %MrB-BUILDLOG%
if not errorlevel 1 (
   echo ERROR: sending notification email for build errors in '%~nx1'. >> %MrB-BUILDLOG%
) else (
   findstr /r /c:"[1-9][0-9]* Warning(s)" >> %MrB-BUILDLOG%
   if not errorlevel 1 (
       echo ERROR: sending notification email for build warnings in '%~nx1'. >>

% %MrB-BUILDLOG) еще (повторяют Успешную сборку '% ~nx1'.>> %MrB-BUILDLOG %))

1
ответ дан 14 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: