首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于配置文件包含MSBuild CreateItem条件

基于配置文件包含MSBuild CreateItem条件
EN

Stack Overflow用户
提问于 2010-04-11 21:10:04
回答 2查看 2K关注 0票数 0

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

MyTest.Tests.dll

MyTest.Tests.config

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

代码语言:javascript
复制
<CreateItem Include="$(AssemblyFolder)\*.Tests.dll"
            Condition="???"
  <Output TaskParameter="Include" ItemName="TestBinariesWithConfig"/>
</CreateItem>

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

谢谢

Mac

编辑:

为了清楚起见,我需要构造一个xUnit.Net项目文件。我之所以需要这样做,是因为我正在通过nCover通过xUnit.Console运行器运行测试(不要问!)但最重要的是,我只能使用项目文件。我遇到的问题是,当我有一个带有相关.config文件的测试dll时。如果没有配置文件,测试运行器将失败。

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

项目模板文件:

代码语言:javascript
复制
<?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>

没有配置文件的测试dlls的FileUpdate任务。

代码语言:javascript
复制
<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;"
  />

因此,我需要一种方法,根据测试dll是否有相应的配置文件,有条件地在FileUpdate任务中添加额外的属性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-12 18:55:56

您可以只使用MSBuild任务输出作为CreateItem任务的源。

代码语言:javascript
复制
<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
EN

Stack Overflow用户

发布于 2010-04-11 21:23:38

你的问题描述对我来说不是很清楚,但是你的.Tests.dll应该总是可用的,因为你应该在测试之前先构建你的项目。只要构建了项目,就可以运行CreateItem任务。CreateItem是检索.dll的一个很好的方法,但是您不需要为它设置条件。

因此,在构建文件中,您应该具有如下内容:-将创建的构建项目/解决方案-> .dll-执行CreateItem -对项目执行某些操作

有了这个awnser,我假设你正在尝试自动化你的测试?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2617089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档