MS 发布Web站点的执行流程

        最近考虑做自动生成产品安装程序的流程,看看能否集成MS Build和Web 发布工具。在Web项目上,运行发布向导,执行配置,会在该项目的Properties\PublishProfiles目录下生成两个文件:{配置名称}.pubxml, {配置名称}.pubxml.user.  后一个文件是MSBuild的标准配置文件。

    下面看了一下MS发布Web到底做了哪些事情。以发布到文件系统为例,主要步骤如下:

1. 验证基础配置信息

   $(PackageAsSingleFile)为 True ...


2. 收集所有需要发布的文件

    从项目项 @(IntermediateAssembly)中收集所有文件。正在添加:

    从项目项 @(Content)中收集所有文件。正在添加:

    从项目输出(IntermediateSatelliteAssembliesWithTargetPath)中收集所有文件。正在添加:
    从项目项 @(ReferenceCopyLocalPaths,ReferenceComWrappersToCopyLocal,ResolvedIsolatedComModules,_DeploymentLooseManifestFile,NativeReferenceFile)中收集    所有文件。
    从项目项 @(AllExtraReferenceFiles)中收集所有文件。正在添加:
    从项目项 @(_binDeployableAssemblies)中收集所有文件。正在添加:


3.  执行Web.Config的转换。 如果发布的是配置是Debug, 则需要合并处理Web.Config 和Web.Debug.Config

    obj\Debug\TransformWebConfig > obj\Debug\ProfileTransformWebConfig


4. 将所有文件都复制到以下临时位置以进行下一步处理 obj\Debug\AspnetCompileMerge\Source

     ....

正在将 D:\Reference\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\zh-Hans\System.Web.Razor.resources.dll 复制到 obj\Debug\AspnetCompileMerge\Source\bin\zh-Hans\System.Web.Razor.resources.dll。
正在将 D:\Reference\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\zh-Hans\System.Web.WebPages.resources.dll 复制到 obj\Debug\AspnetCompileMerge\Source\bin\zh-Hans\System.Web.WebPages.resources.dll。
正在将 D:\Reference\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\zh-Hans\System.Web.WebPages.Deployment.resources.dll 复制到 obj\Debug\AspnetCompileMerge\Source\bin\zh-Hans\System.Web.WebPages.Deployment.resources.dll。
正在将 D:\Reference\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\zh-Hans\System.Web.WebPages.Razor.resources.dll 复制到 obj\Debug\AspnetCompileMerge\Source\bin\zh-Hans\System.Web.WebPages.Razor.resources.dll。
正在将 obj\Debug\TransformWebConfig\transformed\Web.config 复制到 obj\Debug\AspnetCompileMerge\Source\Web.config。

     ....

5. 如果选择了预编译,会将上一步的Source目录执行预编译到obj\Debug\AspnetCompileMerge\TempBuildDir。如果选择了合并程序集,则动态编译AssemblyInfo, 并将该属性附加到该程序集上

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v / -p "{项目路径}\obj\Debug\AspnetCompileMerge\Source" -u -c "{项目路径}\obj\Debug\AspnetCompileMerge\TempBuildDir"
正在创建目录“obj\Debug\AssemblyInfo”。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /out:obj\Debug\AssemblyInfo\AssemblyInfo.dll /target:library Properties\AssemblyInfo.cs
运行 aspnet_merge.exe。
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\aspnet_merge.exe "{项目路径}\obj\Debug\AspnetCompileMerge\TempBuildDir" -prefix PURV -copyattrs obj\Debug\AssemblyInfo\AssemblyInfo.dll -a
已成功合并“{项目路径}\obj\Debug\AspnetCompileMerge\TempBuildDir”。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v / -p "{项目路径}obj\Debug\AspnetCompileMerge\Source" -u -c "{项目路径}\obj\Debug\AspnetCompileMerge\TempBuildDir"


6. 把准备好的文件合并复制到obj\Debug\Package\PackageTmp

   发布管道 AspnetCompileMerge 阶段
   正在创建目录“obj\Debug\Package\PackageTmp”。
   正在将所有文件都复制到以下临时位置以进行打包/发布: 
    obj\Debug\Package\PackageTmp。

   正在将 obj\Debug\AspnetCompileMerge\TempBuildDir\PrecompiledApp.config 复制到 obj\Debug\Package\PackageTmp\PrecompiledApp.config。
   正在将 obj\Debug\AspnetCompileMerge\TempBuildDir\bin\App_global.asax.compiled 复制到 obj\Debug\Package\PackageTmp\bin\App_global.asax.compiled。
   正在将 obj\Debug\AspnetCompileMerge\TempBuildDir\bin\App_global.asax.dll 复制到 obj\Debug\Package\PackageTmp\bin\App_global.asax.dll。

   ....

7. 发布PackageTmp的文件到目标地址

   正在发布文件夹 /...

   正在发布文件夹 bin...
   正在发布文件夹 bin/zh-Hans...
   无法将“bin/zh-Hans/System.Web.Http.WebHost.resources.dll”添加到网站。 无法添加文件“bin\zh-Hans\System.Web.Http.WebHost.resources.dll”。 拒绝访问。
   正在发布文件夹 Content...

   正在发布文件夹 Scripts...

    ....


至此站点成功发布  file://{SharePath}


用于发布的目录结构图:

MS 发布Web站点的执行流程_第1张图片

你可能感兴趣的:(发布,产品)