2010-04-11 9 views
0

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

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" />  --> 
<!-- @[email protected] --> 
    </assemblies> 
</xunit> 

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

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

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

+0

Отзыв на мой ответ был бы рад. – Filburt

+0

Извините, Filburt, немного грубо там. Я на самом деле сделал легкий выход и закончил создание пользовательской задачи MSBuild, чтобы выполнить работу по созданию файла проекта, прежде чем я прочитаю ваш ответ. Я не знал об использовании метаданных, хотя ваш подход выглядит хорошо. Благодарю. –

ответ

1

Вы можете просто использовать вывод MSBuild Task в качестве источника для своей задачи 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

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

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

С этим awnser I» Предполагая, что вы пытаетесь автоматизировать свои тесты?