使用Visual Studio Ultimate / Online和Git自动化Php项目构建的最佳实践

时间:2014-03-13 20:29:08

标签: php git msbuild tfsbuild azure-devops

我们有一个现有的Php应用程序,我希望将其集成到我的非常简单的MS Build过程中。目前,我们正在使用Visual Studio 2013和Visual Studio Online(TFService)和Git来控制各种C ++,C#和这个Php Web应用程序(所有这些都在不同的Git存储库中)。

要在VS2013中开发我们的Php代码,我们使用Devsense的Php扩展(http://www.devsense.com/products/php-tools)。这非常棒,但本身并不支持自动构建。

有没有人为Php设置自动构建?第一个目标是让构建过程将一个zip文件传送到云端,可以由Web头下载。我希望的zip文件包含解决方案和项目文件,而是仅包含我们在Web头上需要的文件。

目前,如果我创造一个开箱即用的简单" hello world"项目使用Devsense模板并将其放在VS Online上自己的Git存储库中,构建因以下错误而中断。

1个错误,0个警告 C:\ a \ src \ PhpTest.sln - 1个错误,0个警告,查看日志文件  C:\ a \ src \ MyPhpSite \ MyPhpSite.phpproj:目标" Build"在项目中不存在。  编译C:\ a \ src \ PhpTest.sln  没有测试结果  没有代码覆盖率结果

思想?

1 个答案:

答案 0 :(得分:2)

这需要编辑您的phpproj文件和MSBUILD的一些知识。

为了编辑您的phpproj文件:

  • 右键单击您的项目(“MyPhpSite”)并选择“卸载项目”。
  • 再次右键单击您的项目,然后选择“编辑MyPhpSite.phpproj”

在文件末尾,输入以下内容以拉入“Build”目标:

<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />

由于我不确定您打算如何使用zip文件,我假设您只是想从Visual Studio Online下载它。

添加内联任务以压缩文件。

<UsingTask TaskName="Zip" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
  <ParameterGroup>
    <InputFileFolder ParameterType="System.String" Required="true" />
    <OutputFileName ParameterType="System.String" Required="true" />
  </ParameterGroup>
  <Task>
    <Reference Include="System.IO.Compression" />
    <Using Namespace="System.IO.Compression" />
    <Code Type="Fragment" Language="cs">
    <![CDATA[        
      ZipFile.CreateFromDirectory(InputFolderName, OutputFileName);     
    ]]>
    </Code>
  </Task>
</UsingTask>

设置以下PropertyGroup和ItemGroup

<PropertyGroup>
  <OutputPath>bin\</OutputPath>
</PropertyGroup>

<ItemGroup>
  <Payload Include="$(OutputPath)$(Name)" />
</ItemGroup>

设置以下目标,最后一个是将文件移动到一个位置然后将其拉上的目标。

<Target Name="CreateManifestResourceNames" />
<Target Name="CoreCompile" />
<Target Name="CopyFilesToOutputDirectory">
  <MakeDir Directories="$(OutputPath)$(Name)" />
  <Copy SourceFiles="@(Compile)" DestinationFiles="$(OutputPath)$(Name)\%(Identity)" />
  <Copy SourceFiles="@(Content)" DestinationFiles="$(OutputPath)$(Name)\%(Identity)" />
  <Zip InputFolderName="@Payload" OutputFileName="$(OutputPath)$(Name).zip/>
</Target>

空白目标是为了防止MSBuild抛出错误。

这将使您获得以zip​​文件结尾的成功构建。