bin文件夹不被复制与MSBuild的,TeamCity的 [英] Bin folder not being copied with MSBuild, Teamcity

查看:104
本文介绍了bin文件夹不被复制与MSBuild的,TeamCity的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很奇怪的问题,在这里我创建了一个自定义的MSBuild任务,将移动,我需要为我的MVC项目到指定位置的所有文件,这样我们就可以发布。当我localY坐标触发我的机器上的脚本,但只要我检查这个改变和TeamCity的运行脚本,它会将一切,除了从Bin文件夹这工作得很好。
但是,如果在命令行(相同的脚本)中运行的MSBuild directlly,它复制bin文件夹。我不明白为什么当TeamCity的是建立它这是行不通的。

有没有人有一个想法,为什么发生这种情况,如何解决呢?

 <目标名称=AfterBuild>
   < CallTarget目标=移动/>
< /目标>
<目标名称=移动>
    <复制来源档案=@(BinFolder)DestinationFolder =$(ArtifactsDir)\\ Webproject.Web \\ BIN/>
    <复制来源档案=@(ContentFolder)DestinationFolder =$(ArtifactsDir)\\ SchrodersFundEngine.Web \\内容/>
    <复制来源档案=@(ImagesFolder)DestinationFolder =$(ArtifactsDir)\\ SchrodersFundEngine.Web \\图像/>
    <复制来源档案=@(ScriptsFolder)DestinationFolder =$(ArtifactsDir)\\ SchrodersFundEngine.Web \\脚本/>
< /目标>
<&的ItemGroup GT;
   < BinFolder排除=* CS。包括= /&GT$(PROJECTDIR)BIN \\ ** \\ *。*;
   < ContentFolder排除=* CS; *。SVN-基地。$(PROJECTDIR)内容\\ * CSS包含= />
   < ImagesFolder排除=* CS; *。SVN-基地包括=$(PROJECTDIR)影像\\ *。*/>
   < ScriptsFolder排除=* CS; *。SVN-基地包括=$(PROJECTDIR)脚本\\ * JS。/>
< /&的ItemGroup GT;

$(ArtifactsDir)是paramanter我是从TeamCity的&放大器传递;手动在命令行。

  / P:ArtifactsDir =%system.agent.work.dir%\\ WebProject \\干线\\网站


解决方案

我觉得这是项目评价的问题。你的BinFolder产品在第一时间对的MSBuild构建之前阅读构建文件,即除PTED $ P $。我认为,$(PROJECTDIR)斌*的 * 的是构建之前空。为了避免这种情况您可以在目标范围内声明的binfolder如下所示:

 <目标名称=AfterBuild>
   < CallTarget目标=移动/>
< /目标>
<目标名称=移动>    <&的ItemGroup GT;
      < BinFolder排除=* CS。包括= /&GT$(PROJECTDIR)BIN \\ ** \\ *。*;
    < /&的ItemGroup GT;    <复制来源档案=@(BinFolder)DestinationFolder =$(ArtifactsDir)\\ Webproject.Web \\ BIN/>
    <复制来源档案=@(ContentFolder)DestinationFolder =$(ArtifactsDir)\\ SchrodersFundEngine.Web \\内容/>
    <复制来源档案=@(ImagesFolder)DestinationFolder =$(ArtifactsDir)\\ SchrodersFundEngine.Web \\图像/>
    <复制来源档案=@(ScriptsFolder)DestinationFolder =$(ArtifactsDir)\\ SchrodersFundEngine.Web \\脚本/>
< /目标><&的ItemGroup GT;
   < ContentFolder排除=* CS; *。SVN-基地。$(PROJECTDIR)内容\\ * CSS包含= />
   < ImagesFolder排除=* CS; *。SVN-基地包括=$(PROJECTDIR)影像\\ *。*/>
   < ScriptsFolder排除=* CS; *。SVN-基地包括=$(PROJECTDIR)脚本\\ * JS。/>
< /&的ItemGroup GT;

否则,你可以尝试使用createItem中的任务:

 <目标名称=移动>    < createItem中排除=* CS。包括=&GT$(PROJECTDIR)BIN \\ ** \\ *。*;
      <输出TaskParameter =包含ITEMNAME =TheFiles/>
    < / createItem中>    <复制来源档案=@(BinFolder)DestinationFolder =$(ArtifactsDir)\\ Webproject.Web \\ BIN/>
    <复制来源档案=@(ContentFolder)DestinationFolder =$(ArtifactsDir)\\ SchrodersFundEngine.Web \\内容/>
    <复制来源档案=@(ImagesFolder)DestinationFolder =$(ArtifactsDir)\\ SchrodersFundEngine.Web \\图像/>
    <复制来源档案=@(ScriptsFolder)DestinationFolder =$(ArtifactsDir)\\ SchrodersFundEngine.Web \\脚本/>
< /目标>

您可以在这里找到更多的信息:

I have a very odd issue, where I've created a custom MSBuild task that would move all files I need for my MVC project to a specific location so that we can publish it. This works fine when I trigger the script localy on my machine but as soon as I check this changes in and Teamcity runs the script, it copies everything except from the Bin folder. However, if run MSbuild directlly from the command line (same script), it does copy the bin folder. I don't understand why this isn't working when TeamCity is building it.

Does anyone have an idea why this is happening and how to solve it?

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

$(ArtifactsDir) is a paramanter I'm passing in from Teamcity & manually in the command line.

/p:ArtifactsDir="%system.agent.work.dir%\WebProject\trunk\Website"

解决方案

I think it's a problem of items evaluation. Your "BinFolder" item is interpreted at the first time MsBuild read your build file, i.e. before the build. And I think that $(ProjectDir)bin**. is empty before the build. To avoid this you can declare your binfolder within your target as shown :

<Target Name="AfterBuild">
   <CallTarget Targets="Move" />
</Target>
<Target Name="Move">

    <ItemGroup>
      <BinFolder Exclude="*.cs" Include="$(ProjectDir)bin\**\*.*"/>
    </ItemGroup>

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

Or else you could try using CreateItem task :

<Target Name="Move">

    <CreateItem Exclude="*.cs" Include="$(ProjectDir)bin\**\*.*">
      <Output TaskParameter="Include" ItemName="TheFiles"/>
    </CreateItem>

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

You can find more information here :

这篇关于bin文件夹不被复制与MSBuild的,TeamCity的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆