如何获得TFS构建,以便使用保存的发布配置文件预编译web应用程序?

如何获得TFS构建,以便使用保存的发布配置文件预编译web应用程序?,tfs,msbuild,continuous-integration,ms-release-management,pre-compilation,Tfs,Msbuild,Continuous Integration,Ms Release Management,Pre Compilation,我目前正在运行一个CI构建和部署,使用TFS 2013进行构建和部署,并使用发布管理2013进行部署,不过我需要对我正在部署的web应用程序(WebForms)进行预编译。我希望在将输出复制到放置位置之前使用发布配置文件来驱动预编译,但是我还没有找到任何能够做到这一点的方法 查找后,我在web应用程序中设置了一个发布配置文件,如果使用VS2013的开发人员命令提示符使用msbuild.exe,该文件将预编译web应用程序 msbuild.exe WebSite.csproj /p:DeployO

我目前正在运行一个CI构建和部署,使用TFS 2013进行构建和部署,并使用发布管理2013进行部署,不过我需要对我正在部署的web应用程序(WebForms)进行预编译。我希望在将输出复制到放置位置之前使用发布配置文件来驱动预编译,但是我还没有找到任何能够做到这一点的方法

查找后,我在web应用程序中设置了一个发布配置文件,如果使用VS2013的开发人员命令提示符使用msbuild.exe,该文件将预编译web应用程序

msbuild.exe WebSite.csproj /p:DeployOnBuild=true /p:PublishProfile=TfsPrecompile
发布名为TfsPrecompile的配置文件,并获得


文件系统
调试
任何CPU
假的
$(MSBuildProjectDirectory)\PublishDirectory
真的
真的
假的
假的
不要合并
在本地运行MSBuild时,我将预编译的站点放在一个新的
PublishDirectory
文件夹中,一切似乎都进行得很顺利

为了链接TFS和发布管理,我使用了ReleaseTfvcTemplate.12.xaml模板

构建>项目:
$/Insert\u Directory\u此处/WebSite.csproj

高级>MSBuild参数:
/p:DeployOnBuild=true/p:PublishProfile=TfsPrecompile


当我使用MSBuild参数运行构建时,与没有预编译参数的构建相比,九分钟左右的构建没有明显的时间差异。当我在本地运行MSBuild时,我看到对ASPNETCOMPILER的引用滚动而过,尽管我在任何TFS诊断日志中都没有看到对ASPNETCOMPILER或AspNetU编译器的引用。

我认为发行版模板中存在影响网站预编译方式的错误。希望使用默认模板,而不是手动添加RM位


首先切换到默认模板,并验证它是否符合您的要求。然后按照上面的线索进行操作。

结果表明,生成框没有执行发布所需的所有目标,因此它忽略了它

答复

终于!我有解决办法。无论是从Team Build部署,还是直接使用MSBuild,都需要将MSBuild目标复制到生成计算机上,才能成功发布

我们不会将VisualStudio安装到构建机器上(浪费许可证),但是我们会安装VisualStudioshell。shell似乎安装了一些MSBuild目标(但不是全部),当然也没有发布

因此,在安装了VS的计算机上,请转到C:\Program Files(x86)\MSBuild\Microsoft

将整个文件夹复制到生成计算机上,并在那里替换相同的文件夹。也许先备份原始的。你也可以准确地找出你真正需要的目标

这个给我修好了


发布模板构建得很好。发布模板中有一个bug,它没有交换_PublishedWebsites文件夹中的标记化配置文件,但仅此而已。这纯粹是发布方面的问题。发布默认模板基本上与默认模板相同,只是它添加了两个与发布关注点完全相关的逻辑部分。建筑一点也不被触碰,所以你的衣服坏了?如果它没有在发布模板中交换标记化配置,那么它就不能像默认的那样工作!如果在“详细”或“诊断”下使用生成日志详细信息运行生成,您是否看到与ASP.NET编译器相关的任何警告?这听起来很熟悉。您正在设置VisualStudioVersion属性吗?有关更多详细信息,请参阅。@DanielMann@SayedIbrahimHashimi我现在使用的是
/flp:verbosity=diagnostic/p:VisualStudioVersion=12.0/p:DeployOnBuild=true/p:PublishProfile=TfsPrecompile
in Build>Advanced>MSBuild Arumges,尽管我在生成服务器上的文件或放置位置上没有看到任何差异。日志文件的大小与以前相同,而且似乎所有构建现在都以诊断级别记录在2013年。在WebSite.log文件中,我在节点1(默认目标)上的1>项目“C:\Builds\1\DIRECTORY\WebSite.csproj”下看到DeployOnBuild=true和PublishProfile=TfsPrecompile。可能需要再次检查,因为我认为在生成服务器上部署VS不需要许可证——如果您只是为了促进生成而使用许可证的话。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <WebPublishMethod>FileSystem</WebPublishMethod>
        <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish />
        <ExcludeApp_Data>False</ExcludeApp_Data>
        <PublishUrl>$(MSBuildProjectDirectory)\PublishDirectory</PublishUrl>
        <DeleteExistingFiles>True</DeleteExistingFiles>
        <PrecompileBeforePublish>True</PrecompileBeforePublish>
        <EnableUpdateable>False</EnableUpdateable>
        <DebugSymbols>False</DebugSymbols>
        <WDPMergeOption>DonotMerge</WDPMergeOption>
    </PropertyGroup>
</Project>