Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用TFS Team Build自定义放置文件夹结构_Tfs_Msbuild_Tfsbuild - Fatal编程技术网

使用TFS Team Build自定义放置文件夹结构

使用TFS Team Build自定义放置文件夹结构,tfs,msbuild,tfsbuild,Tfs,Msbuild,Tfsbuild,我正在使用TFS 2012自动构建一个包含多个windows服务和两个web应用程序的解决方案 我使用了我找到的指南来定制构建过程模板,以便将windows服务放在我喜欢的文件夹结构中。具体而言: \dropserver\droproot\MyApp\BuildNumber\ \服务1 \服务2 \服务3 \服务4 这非常有效,但不幸的是,它不适用于web应用程序。如果我对这些应用程序使用相同的策略,我只获取每个web应用程序的/bin的内容,而不是完整的站点内容 MSBuild通常使用we

我正在使用TFS 2012自动构建一个包含多个windows服务和两个web应用程序的解决方案

我使用了我找到的指南来定制构建过程模板,以便将windows服务放在我喜欢的文件夹结构中。具体而言:

  • \dropserver\droproot\MyApp\BuildNumber\
    • \服务1
    • \服务2
    • \服务3
    • \服务4
  • 这非常有效,但不幸的是,它不适用于web应用程序。如果我对这些应用程序使用相同的策略,我只获取每个web应用程序的/bin的内容,而不是完整的站点内容

    MSBuild通常使用web应用程序目标来处理此问题,但由于某些原因,当您像我所做的那样自定义生成时,这不起作用。我不再在生成输出中获取_PublishedWebSites文件夹。(我猜这是因为我清除了MSBuild任务的OutDir属性。)


    有没有人做过类似的事情,并让它与web应用程序一起使用?

    我想我可以帮上忙,在构建目标中,如果OutDir与OutputPath相同,则不会创建“已发布网站”文件夹

    因此,这并不完美,但是如果您将以下内容添加到第一个属性组中的csproj文件中,您会将所有内容部署到“\bin\deploy\”中,包括_PublishedWebsites文件夹

    <DeployOnBuild>True</DeployOnBuild>
    <OutDir>bin\deploy\</OutDir>
    
    True
    bin\deploy\
    
    看看这篇文章和这篇文章。 由于web项目需要所有文件,因此需要触发发布过程,通过调整该过程的目标,可以将所有文件复制到需要的位置。 我认为他的回答中的选项(2)对你有用。
    我希望这会有所帮助。

    正如我在您的参考资料中看到的,它将编译并打包二进制文件。它不会按照上述步骤部署网站

    如果您想获得
    \u PublishedWebSites
    文件夹下的.html、.css、.js等,您需要执行Web部署。我们可以通过从VS项目的右键单击菜单中单击
    发布
    选项,并选择发布方法作为文件系统手动执行此操作

    但是,由于您需要在生成中自动执行此操作并将其放到自定义放置文件夹中,因此可能需要通过调用
    AspNetCompiler
    任务来操作MSBuild脚本。你可以在网站上获得更多信息。通过在调用此目标时指定
    TargetPath
    ,可以将Web文件部署到相应的自定义放置文件夹中


    愉快的脚本编写。

    通过一点定制,这个解决方案最终对我有效:

    基本上,我们做了链接推荐的事情,但也利用了新的解决方案配置(我称之为TeamBuild),而不是条件属性定义

    我认为使这一切都能正常工作的关键是将outputDirectory作为TeamBuildOutDir参数传递给MSBuild。允许Team Build将此变量引用嵌入OutDir或OutputPath变量中,以生成到正确的暂存位置,然后自动将文件从该位置复制到放置文件夹

    我将把这一点做得更进一步,并摆脱整个发布网站的事情,但这将完全在构建工作流中完成

    编辑:TFS 2013通过简单构建配置选项本机支持此功能:


    您是否查看了此博客,这解决了我需要自定义TeamBuild输出目录的问题。


    你能在记事本中打开你的网站项目并检查其中是否有以下内容:现在就给它一个机会。。。为什么我需要两次指定它?我将它添加到proj文件中,但它似乎没有任何区别。当我在VS中构建“TeamBuild”配置时,我将二进制输出复制到我的目标目录结构中,但没有复制其余的web文件(html、js、css、图像等)。对不起,我错过了更进一步的内容,实际上这并不能解决问题。我已经做了一个修正,我认为会有帮助-虽然它并不完美。只是给了这个机会。。。还是没有骰子。我仍然只在我的放置位置获得二进制输出。当我在内部手动构建时,情况也是如此。在bin\deploy \-您是否在bin文件夹中获得了“deploy”文件夹?我也使用了EdSquared解决方案,效果非常好。我极力推荐。注释中有一些细节需要注意(即OutDir属性必须以尾部斜杠结尾,等等)。