0

我正在尝试选择包含相应配置文件的测试 dll 列表

MyTest.Tests.dll我的
Test.Tests.config

我必须使用 createItem 因为在脚本加载时 dll 不可用

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

有没有我可以使用的条件或者这是错误的方法?

谢谢麦克
_

编辑:

好的,澄清一下,我需要构建一个 xUnit.Net 项目文件。我需要这样做,因为我通过 xUnit.Console 运行器通过 nCover 运行测试(不要问!)但总而言之,我只能使用项目文件。我遇到的问题是当我有一个带有关联 .config 文件的测试 dll 时。没有配置文件,测试运行器将失败。

这意味着我需要有条件地在测试项目文件中添加一个额外的属性(配置文件)。

项目模板文件:

<?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="&lt;!-- @TARGETS@ --&gt;"
  ReplacementText="&lt;!-- @TARGETS@ --&gt;%0D%0A&lt;assembly filename='$(AssemblyFolder)\%(TestBinaries.FileName)%(TestBinaries.Extension)' shadow-copy='false' /&gt;"
  />

所以我需要一种方法来有条件地在 FileUpdate 任务中添加额外的属性,具体取决于测试 dll 是否有相应的配置文件。

4

2 回答 2

1

您可以只使用 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>
于 2010-04-12T10:55:56.150 回答
0

您的问题描述对我来说不是很清楚,但是您的 .Tests.dll 应该始终可用,因为您应该在测试之前先构建您的项目。无论何时构建项目,都可以运行 CreateItem 任务。CreateItem 是检索 .dll 的好方法,但您不需要条件。

所以在你的构建文件中你应该有这样的东西: - 构建项目/解决方案 -> .dll 将被创建 - 执行 CreateItem - 对项目做一些事情

有了这个遮阳篷,我假设您正在尝试自动化测试?

于 2010-04-11T13:23:38.207 回答