TFS持续集成和部署

时间:2017-03-20 02:42:43

标签: tfs msbuild

我有一个Web项目Project A和一个库Project B. 项目B正在构建到项目A \ Plugins中。

问题是当项目A通过CI构建时项目B未与项目A一起部署.CI中的MSBuild参数是:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\" /t:ProjectA

我将以下代码添加到Project A.csproj中,以使用A:

部署Project 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>

在日志执行顺序中看起来很好(构建后复制),但在部署后,目标服务器上不存在Plugin文件夹。

我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

根据您的描述,您需要将Project A \ Plugins文件夹签入TFS。但是没有建议。

我们建议您在同一解决方案中创建项目引用,或者创建NuGet以进行包管理。建议您在项目B的build a nuget packagepublish this Nuget package,然后在构建项目时restore the library到项目A.

答案 1 :(得分:0)

文件需要包含在项目中。由于文件是动态生成的,因此您可以将此代码添加到项目文件(例如XX.csproj)

  <Content Include="plugin\**\*.*" />