在内部测试阶段,经常改一点小东西需要更新给测试继续测试。然后就需要频繁的找到对应更改的视图/JS文件,或者是编译的dll文件,再打开测试服务器找到对应站点替换进去,整套流程下来就非常的繁琐费时。

使用WebDeploy就可以很轻松的解决这些问题啦,我们可以直接在vs上点击发布就可以一键部署到iis对应的站点上了。

安转Web Deploy

打开http://www.iis.net/downloads/microsoft/web-deploy下载安装包,然后在服务器上进行安装,选择完整安装可以少踩坑。

使用Web Deploy自动打包发布-LMLPHP

安装IIS的管理服务

打开服务器管理器,选择添加角色和功能

使用Web Deploy自动打包发布-LMLPHP

 一直点下一步,到服务器角色选项,勾选web服务器(IIS)下的管理服务。然后继续下一步到安装为止。

使用Web Deploy自动打包发布-LMLPHP

确认安装成功

查看管理服务

使用Web Deploy自动打包发布-LMLPHP

 选择Windows凭证或IIS管理器凭证

使用Web Deploy自动打包发布-LMLPHP

 添加IIS管理器用户

双击IIS管理器用户

使用Web Deploy自动打包发布-LMLPHP

添加用户

使用Web Deploy自动打包发布-LMLPHP

 对应站点设置管理用户

选择IIS管理器权限

使用Web Deploy自动打包发布-LMLPHP

 从IIS管理器中选择

使用Web Deploy自动打包发布-LMLPHP

 使用VS一键发布

添加WebDploy发布

右键web站点,选择发布,创建一个Web部署

使用Web Deploy自动打包发布-LMLPHP

 使用Web Deploy自动打包发布-LMLPHP

 用户名和密码为刚刚IIS创建的内容。

点击验证连接,如果连接失败建议检查下Web  Management Service服务是否已启动。

使用Web Deploy自动打包发布-LMLPHP

 再检查下用户名和密码。(PS:如果确认无误还是不行的话,可以尝试重装Web Deploy)

发布

点击发布,发布文件夹下的内容就会自动更新到IIS站点上啦。

自定义发布内容

 由于我们是多个web站点的项目,所以需要将次发布的内容移动到发布目录的特定文件夹中。

打开pubxml文件夹,添加

<Target Name="MoveFilesToDesignatedDirectory" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy">
    <Message Text="Moving files to designated directory" importance="high" />
    <ItemGroup>
      <_CustomMoveFiles Include="$(_PackageTempDir)\**" Exclude="$(_PackageTempDir)\bin\**;" />
    </ItemGroup>
    <Move SourceFiles="%(_CustomMoveFiles.Identity)" DestinationFolder="$(_PackageTempDir)\Apps\Scm\%(RecursiveDir)" />
    <Message Text="Delete other folder" importance="high" />
    <RemoveDir Directories="$(_PackageTempDir)\Scripts;$(_PackageTempDir)\Template;$(_PackageTempDir)\Views;$(_PackageTempDir)\grf;" />
  </Target>

  绑定一个事件到CopyAllFilesToSingleFolderForMsdeploy后,点击发布生成成功后,发布的内容会先在_PackageTempDir生成,目录为web站点对应的\obj\Release\Package\PackageTmp\bin目录下。

我们可以在发布到iis之前,修正这个文件夹的内容,然后发布的时候就会按我们修正的内容去发布了。

使用ItemGroup可以定义我们要一定的内容,即我们需要将非bin文件夹外的文件都移动到发布文件夹的\Apps\Scm\目录下,使用Move命令可以实现这个,然后再使用RemoveDir将移动前的文件夹删除掉。

最后我们可以将Bin目录下的文件,选择性的发布

 <Target Name="CutBin" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy">
    <Message Text="Cutting Bin directory" importance="high" />
    <ItemGroup>
      <_CustomBinFiles Include="$(_PackageTempDir)\bin\**" Exclude="$(_PackageTempDir)\bin\iERP.*" />
    </ItemGroup>
    <Delete Files="@(_CustomBinFiles)" />
  </Target>

  使用ItemGroup,定义要删除的文件,即非IERP.前缀的文件,然后使用Delete删除

原始发布生成的内容为

使用Web Deploy自动打包发布-LMLPHP

 经过我们上述操作后,除Bin文件夹外的内容都被移动到Apps里面了,然后Bin文件夹里只有IERP.为前缀的文件

使用Web Deploy自动打包发布-LMLPHP

命令的详细介绍可以查看文档:https://docs.microsoft.com/zh-cn/visualstudio/msbuild/removedir-task?view=vs-2022

03-29 13:56