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

使用Visual Studio Ultimate/Online和Git自动化Php项目构建的最佳实践,php,git,msbuild,tfsbuild,azure-devops,Php,Git,Msbuild,Tfsbuild,Azure Devops,我们有一个现有的Php应用程序,我想将它集成到我非常简单的MS构建过程中。目前我们正在使用VisualStudio 2013最终与VisualStudio在线TFService和Git到源码控制各种C++、C和PHP Web应用程序,这些都在不同的Git库中。p> 为了在VS2013内部开发Php代码,我们使用Devsense的Php扩展。这很好,但不支持自动构建 有人为Php设置过自动构建吗?第一个目标是让构建过程向云交付一个zip文件,该文件可以由web负责人下载。我希望zip文件不包括解决

我们有一个现有的Php应用程序,我想将它集成到我非常简单的MS构建过程中。目前我们正在使用VisualStudio 2013最终与VisualStudio在线TFService和Git到源码控制各种C++、C和PHP Web应用程序,这些都在不同的Git库中。p> 为了在VS2013内部开发Php代码,我们使用Devsense的Php扩展。这很好,但不支持自动构建

有人为Php设置过自动构建吗?第一个目标是让构建过程向云交付一个zip文件,该文件可以由web负责人下载。我希望zip文件不包括解决方案和项目文件,而是只包括我们在web头上需要的文件

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

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


想法?

这需要编辑phpproj文件并了解MSBUILD

要编辑phpproj文件,请执行以下操作:

右键单击项目MyPhpSite并选择卸载项目。 再次右键单击项目,然后选择编辑MyPhpSite.phpproj 在文件末尾,输入以下内容以拉入生成目标:

<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文件结束

回答得很好。我们已经放弃了PHP,转而使用ASP.NET/AngularJs解决方案,但我很感激这些信息,我相信有人会发现这非常有用。所有这些行都在.phpproj文件中吗?能否发送.phpproj代码段?我想确保我把项目放在文件中的正确位置。谢谢