MrW*_*MrW 4 msbuild asp.net-mvc 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)
我认为这是项目评估的问题.你的"BinFolder"项是在MsBuild第一次读取你的构建文件时解释的,即在构建之前.而且我认为$(ProjectDir)bin***.*在构建之前是空的.为避免这种情况,您可以在目标中声明您的binfolder,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
或者您可以尝试使用CreateItem任务:
<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>
Run Code Online (Sandbox Code Playgroud)
您可以在这里找到更多信息 :
| 归档时间: |
|
| 查看次数: |
3182 次 |
| 最近记录: |