如何在VS2010中创建预发布和发布后脚本

7

我想创建一个脚本,执行一些操作,然后将网站发布到生产环境,并在Visual Studio 2010中运行另一个脚本。

4个回答

4
当然可以。我认为您需要 MSBuild。它已经有很多默认任务,比如复制、删除等等。此外,还有很多第三方任务适用于 MSBuild,例如 SDCTasksCommunity Tasks
例如,这里是使用 SDCTasks 部署网站的一种方法。在此示例中,将构建网站解决方案和 Web 服务解决方案,并在成功的情况下将它们发布到某个远程服务器上,并使用发布版本配置文件进行正确配置。
   <Import Project="$(MSBuildExtensionsPath)\SDCTasks\Microsoft.Sdc.CommonWOBizTalk.tasks"/>
    ...
    <ItemGroup>
        <SolutionToBuild Include="$(BuildProjectFolderPath)/../../website.sln">
            <Targets></Targets>
            <Properties></Properties>
        </SolutionToBuild>

        <SolutionToBuild Include="$(BuildProjectFolderPath)/../../services.sln">
            <Targets></Targets>
            <Properties></Properties>
        </SolutionToBuild>

    </ItemGroup>

  <PropertyGroup>
    <PublishFolder>\\myservername\deployto</PublishFolder>
  </PropertyGroup>

  <Target Name="AfterCompile" DependsOnTargets="PublishWebSite;PublishServices;SetConfiguration"/>

  <Target Name="PublishWebSite">
    <Folder.CleanFolder Path="$(PublishFolder)" Force="True" />
    <Folder.CopyFolder Source="$(OutDir)_PublishedWebsites\MyWebSite" Destination="$(PublishFolder)" />
  </Target> 

  <Target Name="PublishServices">
    <MakeDir Directories="$(PublishFolder)\Services"/>
    <Folder.CopyFolder Source="$(OutDir)_PublishedWebsites\MyService" Destination= "$(PublishFolder)\ Services" />
  </Target>

  <Target Name="SetConfiguration">
      <Copy SourceFiles="$(OutDir)_PublishedWebsites\MyWebSite\WebRelease.config" DestinationFiles="$(PublishFolder)\web.config" />
      <Copy SourceFiles="$(OutDir)_PublishedWebsites\MyService\WebRelease.config" DestinationFiles="$(PublishFolder)\Services\web.config" />
  </Target>

可能是可以的,但微软搞得太麻烦了,我不想去烦。我只需编写一个批处理文件来复制我需要的文件,而不是整个下午都在弄愚蠢的 XML。 - Paul McCarthy

1

我认为你需要的是一个,在调用发布之前执行一些操作,然后执行一些额外的操作。如果你也使用TFS 2010,那么你可以自定义一个构建定义来实现你想要的功能。


1
迟来的回答,涉及“预发布”部分(在VS2017中测试过,但我认为在之前的版本中也应该适用):
  1. Open Web publishing configuration file (e.g. Test.pubxml)

  2. Define a target that executes a custom scripts located somewhere within your project (e.g. some Powershell script within an inner folder). This code should be put within the Project tag, after the first PropertyGroup:

    <PropertyGroup>
      <PipelineDependsOn>
        ExtBuild;
        $(PipelineDependsOn);
      </PipelineDependsOn>
    </PropertyGroup>
    
    <Target Name="ExtBuild">
      <Message Text="Building something else" Importance="high"/>
      <Exec Command="powershell.exe -file &quot;$(ProjectDir)\Publish\publish.ps1&quot;" />
    </Target>
    

注意:当前目录为$(ProjectDir),因此在从目标文件中包含其他ps1文件时要小心。


这是针对预发布的工作。您能否提及所需更改以使其适用于发布后? - Amey Kamat
2
为完整性考虑:https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.2#run-a-target-before-or-after-publishing - Luuk Krijnen

-1

对于预发布,至少对于ClickOnce,您可以添加:

<Target Name="ClearPrevPulish" BeforeTargets="PublishOnly">
  <RemoveDir Directories="$(PublishUrl)" />
</Target>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接