使用Visual Studio Ultimate/Online和Git自动化Php项目构建的最佳实践
我们有一个现有的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已编译 没有测试结果 没有代码覆盖率结果使用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文件不包括解决
想法?这需要编辑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代码段?我想确保我把项目放在文件中的正确位置。谢谢