相关疑难解决方法(0)

CreateItem vs ItemGroup

在目标中创建项目有什么区别,如下所示:

<Target Name="DoStuff">
    <CreateItem Include="@(IntermediateAssembly)" >
        <Output TaskParameter="Include" ItemName="FileWrites"/>
    </CreateItem>
</Target>
Run Code Online (Sandbox Code Playgroud)

和这样:

<Target Name="DoStuff">
    <ItemGroup>
        <FileWrites Include="@(IntermediateAssembly)" />
    </ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)

你何时会使用其中一个,为什么?

msbuild

32
推荐指数
3
解决办法
1万
查看次数

为什么MSBuild ItemGroup条件不在全局范围内工作

我非常好奇为什么我无法根据在目标内部按预期工作的元数据条件在全局范围内创建项目.例如,这可以按预期工作:

<ItemGroup>
    <TestItems Include="TestItem1">
        <TestFlag>true</TestFlag>
    </TestItems>
    <TestItems Include="TestItem2">
        <TestFlag>false</TestFlag>
    </TestItems>
</ItemGroup>

<Target Name="Default">

    <Message Text="@(TestItems)" />
    <Message Text="@(TestItems)" Condition="'%(TestItems.TestFlag)'=='true'" />

    <ItemGroup>
        <FilteredTestItems Include="@(TestItems)" Condition="'%(TestItems.TestFlag)'=='true'" />
    </ItemGroup>

    <Message Text="@(FilteredTestItems)" />
    <Message Text="@(FilteredTestItems)" Condition="'%(FilteredTestItems.TestFlag)'=='true'" />

</Target>
Run Code Online (Sandbox Code Playgroud)

并产生以下输出:

TestItem1; TestItem2 TestItem1 TestItem1 TestItem1

这符合预期:

<ItemGroup>
    <TestItems Include="TestItem1">
        <TestFlag>true</TestFlag>
    </TestItems>
    <TestItems Include="TestItem2">
        <TestFlag>false</TestFlag>
    </TestItems>
</ItemGroup>

<ItemGroup>
    <FilteredTestItems Include="@(TestItems)" Condition="'false'=='true'" />
</ItemGroup>

<Target Name="Default">

    <Message Text="@(TestItems)" />
    <Message Text="@(TestItems)" Condition="'%(TestItems.TestFlag)'=='true'" />


    <Message Text="@(FilteredTestItems)" />
    <Message Text="@(FilteredTestItems)" Condition="'%(FilteredTestItems.TestFlag)'=='true'" />

</Target>
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

TestItem1; TestItem2 TestItem1

但是这个:

<ItemGroup> …
Run Code Online (Sandbox Code Playgroud)

msbuild

6
推荐指数
1
解决办法
2134
查看次数

Bin文件夹未与MSBuild,Teamcity一起复制

我有一个非常奇怪的问题,我已经创建了一个自定义MSBuild任务,它将我需要的所有MVC项目文件移动到特定位置,以便我们可以发布它.当我在我的机器上触发脚本时,这很好用,但是当我检查这个更改并且Teamcity运行脚本时,它会复制除Bin文件夹之外的所有内容.但是,如果直接从命令行(相同的脚本)运行MSbuild,它会复制bin文件夹.我不明白为什么在TeamCity构建它时这不起作用.

有谁知道为什么会这样,以及如何解决它?

<Target Name="AfterBuild">
   <CallTarget Targets="Move" />
</Target>
<Target Name="Move">
    <Copy SourceFiles="@(BinFolder)" DestinationFolder="$(ArtifactsDir)\Webproject.Web\bin" />
    <Copy SourceFiles="@(ContentFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Content" />
    <Copy SourceFiles="@(ImagesFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Images" />
    <Copy SourceFiles="@(ScriptsFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Scripts" />
</Target>


<ItemGroup>
   <BinFolder Exclude="*.cs" Include="$(ProjectDir)bin\**\*.*"/>
   <ContentFolder Exclude="*.cs;*.svn-base" Include="$(ProjectDir)Content\*.css"/>
   <ImagesFolder Exclude="*.cs;*.svn-base" Include="$(ProjectDir)Images\*.*"/>
   <ScriptsFolder Exclude="*.cs;*.svn-base" Include="$(ProjectDir)Scripts\*.js"/>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

$(ArtifactsDir)是一个游行者,我从Teamcity传入并在命令行中手动传递.

/p:ArtifactsDir="%system.agent.work.dir%\WebProject\trunk\Website"
Run Code Online (Sandbox Code Playgroud)

msbuild asp.net-mvc teamcity

4
推荐指数
1
解决办法
3182
查看次数

标签 统计

msbuild ×3

asp.net-mvc ×1

teamcity ×1