MSBuild CreateItem условие включения на основе файла конфигурации - PullRequest
0 голосов
/ 11 апреля 2010

Я пытаюсь выбрать список тестовых библиотек, которые содержат соответствующие файлы конфигурации

MyTest.Tests.dll
MyTest.Tests.config

Я должен использовать createItem, так как библиотеки не доступны во время загрузки скрипта

<CreateItem Include="$(AssemblyFolder)\*.Tests.dll"
            Condition="???"
  <Output TaskParameter="Include" ItemName="TestBinariesWithConfig"/>
</CreateItem>

Есть ли условие, которое я могу использовать, или это неправильный подход?

Спасибо
Mac

EDIT:

хорошо, чтобы уточнить, мне нужно создать файл проекта xUnit.Net. Мне нужно сделать это, потому что я запускаю тесты через xUnit.Console через nCover (не спрашивайте!), Но в общем и целом я могу использовать только файл проекта. У меня проблема, когда у меня есть тестовая DLL со связанным файлом .config. Без файла конфигурации выполнение теста не будет выполнено.

Это означает, что мне нужно условно добавить дополнительный атрибут (config-file) в файл тестового проекта.

Файл шаблона проекта:

<?xml version="1.0" encoding="utf-8"?>
<xunit>
  <assemblies>
<!-- SAMPLE    <assembly filename="Tests.dll" shadow-copy="false" config-file="Tests.dll.config" />     -->
<!-- @TARGETS@ -->
  </assemblies>
</xunit>

Задача FileUpdate для тестовых библиотек без файла конфигурации.

<FileUpdate
  Files="$(AssemblyFolder)\$(XUnitProjectFileName)"
  Regex="&lt;!-- @TARGETS@ --&gt;"
  ReplacementText="&lt;!-- @TARGETS@ --&gt;%0D%0A&lt;assembly filename='$(AssemblyFolder)\%(TestBinaries.FileName)%(TestBinaries.Extension)' shadow-copy='false' /&gt;"
  />

Поэтому мне нужен способ условно добавить дополнительный атрибут в задачу FileUpdate в зависимости от того, существует ли соответствующий файл конфигурации для тестовой библиотеки DLL.

Ответы [ 2 ]

1 голос
/ 12 апреля 2010

Вы можете просто использовать вывод задачи MSBuild в качестве источника для вашей задачи CreateItem.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <ProjectReferences Include="*.*proj" />
    </ItemGroup>

    <Target Name="BuildMyProjects">
        <MSBuild
            Projects="@(ProjectReferences)"
            Targets="Build">
            <Output
                TaskParameter="TargetOutputs"
                ItemName="AssembliesBuiltByChildProjects" />
        </MSBuild>
    </Target>

    <Target Name="AddConfigMetadata" DependsOnTargets="BuildMyProjects">
        <CreateItem
            Include="@(AssembliesBuiltByChildProjects)"
            AdditionalMetadata="config-file=%(Identity).config">
            <Output
                TaskParameter="Include"
                ItemName="MySourceItemsWithMetadata" />
        </CreateItem>
    </Target>

    <Target Name="WhatEverYouLikeToDo" DependsOnTargets="AddConfigMetadata">
        <Message Text="%(MySourceItemsWithMetadata.config-file)" />
    </Target>

</Project>
0 голосов
/ 11 апреля 2010

Ваше описание проблемы мне не совсем понятно, но ваши файлы .Tests.dll всегда должны быть доступны, потому что вы должны сначала построить свой проект перед его тестированием. Всякий раз, когда вы строите свой проект, вы можете запускать задачу CreateItem. CreateItem - хороший подход для извлечения .dll, но вам не нужно условие для этого.

Итак, в вашем файле сборки у вас должно быть что-то вроде этого: - Построить проект / решение -> .dll будут созданы - Выполнить CreateItem - Сделай что-нибудь с предметом

С этим awnser, я полагаю, вы пытаетесь автоматизировать свои тесты?

...