【发布时间】:2017-03-20 02:42:43
【问题描述】:
我有一个 Web 项目项目 A 和一个库项目 B。 项目 B 正在构建到项目 A\Plugins 中。
问题是当通过 CI 构建项目 A 时,项目 B 没有与项目 A 一起部署。 CI 中的 MSBuild 参数是:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\" /t:ProjectA
我将以下代码添加到项目 A.csproj 中,以使用 A 部署项目 B:
<ItemGroup>
<ProjectsToBuild Include="..\..\Plugins\**\*ProjectB*proj" />
</ItemGroup>
<Target Name="Plugin" AfterTargets="Build">
<Message Text="Building Plugins" Importance="High" />
<MSBuild Projects="@(ProjectsToBuild)" ContinueOnError="false" Properties="Configuration=$(Configuration)">
<Output ItemName="OutputFiles" TaskParameter="TargetOutputs" />
</MSBuild>
<CallTarget Targets="CopyPlugins"/>
</Target>
<PropertyGroup>
<PluginDirectory>Plugins</PluginDirectory>
</PropertyGroup>
<Target Name="CopyPlugins">
<Message Text="Copying plugins to $(_PackageTempDir)\Plugins\ ($(ProjectDir)$(PluginDirectory))" Importance="high" />
<CreateItem Include="$(ProjectDir)$(PluginDirectory)\**\*.*">
<Output TaskParameter="Include" ItemName="PluginFiles" />
</CreateItem>
<Copy DestinationFolder="$(_PackageTempDir)\Plugins\" SourceFiles="@(PluginFiles)" SkipUnchangedFiles="true" />
</Target>
在日志中执行顺序似乎很好(构建后复制),但部署后目标服务器上不存在插件文件夹。
我错过了什么吗?
【问题讨论】:
-
您没有包含 ProjectA 和 ProjectB 的 .sln (解决方案)以及 ProjectA “按项目”(在 Visual Studio 中)引用 ProjectB 的原因吗?这会让事情变得更容易。
-
您使用的是哪个版本的 TFS?您使用 XAML 构建还是基于任务的构建?你检查插件文件夹吗?请登录构建代理机器,并使用 MSBuild 命令行手动构建您的项目,看看您会得到什么结果。