Могу ли я добавить элемент импорта msbuild с помощью DTE.Project? - PullRequest
0 голосов
/ 01 июля 2010

Я работаю над плагином VS для обработки нового типа теста. Одна из вещей, которую мы хотим сделать, это добавить импорт MSBuild в файл проекта, когда один из наших тестов находится в тестовом проекте, для запуска наших пользовательских задач сборки.

Я могу добавить элемент импорта с помощью Microsoft.Build.BuildEngine.Project.Imports, но если я сохраняю файл проекта через объект BuildEngine, я получаю предупреждение «Файл был изменен вне Visual Studio». Добавление новых Imports в коллекцию Project.Imports, по-видимому, не помечает проект как грязный в Visual Studio, поэтому я не могу полагаться на VS для правильного сохранения файла.

Можно ли как-нибудь получить доступ к этой части функциональности MSBuild через объекты DTE.Project или VSLangProj.Project?

Спасибо.

1 Ответ

0 голосов
/ 02 июля 2010

Я бы посоветовал вам добавить фиксированный импорт в ваш .csproj и решить внутри этого .targets, выполнять тесты или нет:

Ваш .csproj

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="CustomTest.targets" Condition="Exists('CustomTest.targets')" />

Обратите внимание на Condition, чтобы проверить, доступны ли .targets.

Ваши CustomTest.targets

Определите, какие тесты нужно запустить, установив соответствующие условия.

<Project DefaultTargets="RunTests" xmlns="...">
    <ItemGroup>
        <MyCustomTests Include="Test_A" Condition="Exists('Test_A.cs')" />
        <MyCustomTests Include="Test_B" Condition="Exists('Test_B.cs')" />
    </ItemGroup>

    <Target Name="RunTests" Condition="@(MyCustomTests)!=''">
        <Message Text="Running Test %(MyCustomTests.Identity)" />
    </Target>
</Project>

Вы даже можете расширить свой элемент MyCustomTests с помощью некоторых метаданных, которые могут вам понадобиться для выполнения теста:

    ...
    <ItemGroup>
        <MyCustomTests Include="Test_A" Condition="Exists('Test_A.cs')">
            <TestType>Boundary</TestType>
        </MyCustomTests>
        <MyCustomTests Include="Test_B" Condition="Exists('Test_B.cs')">
            <TestType>SQLInjection</TestType>
        </MyCustomTests>
    </ItemGroup>

    ...
    <Message Text="Running %(MyCustomTests.TestType) Test %(MyCustomTests.Identity)" />
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...