2010-04-11 54 views
0

我想选择包含测试的DLL列表相应的配置文件的MSBuild CreateItem条件包括基于配置文件

MyTest.Tests.dll
MyTest.Tests.config

我要使用createItem作为DLL是不可用的脚本加载

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

的时间我可以使用或这是错误的做法的情况?

感谢
的Mac

编辑:

OK,澄清一下,我需要构建一个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" />  --> 
<!-- @[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;" 
    /> 

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

+0

对我的答案的反馈将受到欢迎。 – Filburt 2010-04-23 12:58:09

+0

对不起Filburt,有点粗鲁。实际上我采取了简单的方法,最终创建了一个自定义的MSBuild任务来完成生成项目文件的工作,然后再阅读您的答案。我不知道如何使用元数据,所以你的方法看起来不错。谢谢。 – 2010-04-26 19:55:51

回答

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> 
0

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

所以在生成文件中,你应该有这样的事情: - 建立工程/解决方案 - > .DLL的将被创建 - 执行CreateItem - 做一些与项目

有了这个awnser我假设你试图自动化你的测试?