我正在尝试选择包含相应配置文件的测试dll列表
MyTest.Tests.dll
MyTest.Tests.config
我必须使用createItem,因为在加载脚本时dll不可用
<CreateItem Include="$(AssemblyFolder)\*.Tests.dll"
Condition="???"
<Output TaskParameter="Include" ItemName="TestBinariesWithConfig"/>
</CreateItem>
是否存在我可以使用的情况或这是错误的方法?
感谢
MAC
编辑:
好的,澄清一下,我需要构建一个xUnit.Net项目文件。我需要这样做,因为我通过nCover通过xUnit.Console运行器运行测试(不要问!)但是它的长短是我只能使用项目文件。我遇到的问题是当我有一个带有相关.config文件的测试dll时。没有配置文件,测试运行器将失败。
这意味着我需要在测试项目文件中有条件地添加一个额外的属性(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>
没有配置文件的测试dll的FileUpdate任务。
<FileUpdate
Files="$(AssemblyFolder)\$(XUnitProjectFileName)"
Regex="<!-- @TARGETS@ -->"
ReplacementText="<!-- @TARGETS@ -->%0D%0A<assembly filename='$(AssemblyFolder)\%(TestBinaries.FileName)%(TestBinaries.Extension)' shadow-copy='false' />"
/>
所以我需要一种方法来有条件地在FileUpdate任务中添加额外的属性,具体取决于测试dll是否有相应的配置文件。
答案 0 :(得分:1)
您可以使用MSBuild Task输出作为CreateItem Task的源。
<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>
答案 1 :(得分:0)
您的问题描述对我来说并不是很清楚,但您的.Tests.dll应始终可用,因为您应该在测试之前先构建项目。无论何时构建项目,都可以运行CreateItem任务。 CreateItem是检索.dll的好方法,但你不需要条件。
所以在你的构建文件中你应该有这样的东西: - 构建项目/解决方案 - &GT; .dll将被创建 - 执行CreateItem - 对项目做一些事情
有了这个awnser,我假设你正在尝试自动化你的测试?