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

时间:2010-11-21 15:11:27

标签: c# asp.net visual-studio-2010

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

4 个答案:

答案 0 :(得分:4)

当然有可能。我需要你MSBuild。它已经有lot default tasks复制,删除等。此外,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>

答案 1 :(得分:0)

我认为您所寻找的是macro,它会在调用发布之前执行操作,然后执行一些其他操作。如果您正在使用TFS 2010,那么您可以自定义构建定义以执行您正在寻找的内容。

答案 2 :(得分:0)

涵盖“预发布”部分的最新答案(已在VS2017中进行测试,但我认为这也应在以前的版本中使用):

  1. 打开Web发布配置文件(例如Test.pubxml)

  2. 定义一个目标,该目标执行位于项目内某个位置的自定义脚本(例如,内部文件夹中的某些Powershell脚本)。此代码应放在第一个Project之后的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文件时要小心

答案 3 :(得分:0)

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

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