gpt4 book ai didi

asp.net-mvc - 未使用 MSBuild、Teamcity 复制 Bin 文件夹

转载 作者:行者123 更新时间:2023-12-03 04:46:34 25 4
gpt4 key购买 nike

我有一个非常奇怪的问题,我创建了一个自定义 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>

$(ArtifactsDir) 是我从 Teamcity 传入并在命令行中手动传递的参数。

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

最佳答案

我认为这是项目评估的问题。您的“BinFolder”项目在 MsBuild 第一次读取您的构建文件时(即构建之前)被解释。我认为 $(ProjectDir)bin***.* 在构建之前是空的。为了避免这种情况,您可以在目标中声明 bin 文件夹,如下所示:

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

或者您可以尝试使用 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>

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

关于asp.net-mvc - 未使用 MSBuild、Teamcity 复制 Bin 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3943136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com