AfterPublish script doesn't run when I publish a web app

前端 未结 2 1248
醉酒成梦
醉酒成梦 2020-12-11 02:54

I\'ve got an ASP.NET web app that I publish to our website when I make changes or fix bugs. We want to automatically save a backup of the project files to our server (separ

相关标签:
2条回答
  • 2020-12-11 03:24

    When you run the cmd file manually, the script surely runs with administrator privileges, or enough privileges to succesfully copy the files to the destination (in the I: unit in this case).

    The thread that executes the script from Visual Studio probably has very restricted privileges, due to security reasons.

    Your best bet, is run the script from powershell, passing the following argument to it:

    -ExecutionPolicy Unrestricted

    Your XML will look like this:

    <Target Name="CustomPostPublishActions" AfterTargets="MSDeployPublish">
      <PropertyGroup>
        <PowerShellExe Condition=" '$(PowerShellExe)'=='' "> 
          %WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe
        </PowerShellExe>
        <ScriptLocation Condition=" '$(ScriptLocation)'=='' ">
          C:\deg\bat\backupRMA.cmd
        </ScriptLocation>
      </PropertyGroup>
      <Exec Command="$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted 
                     -command &quot;&amp; invoke-command -scriptblock { 
                              &amp;&apos;$(ScriptLocation)&apos; 
                              }
                              &quot;"/>  
    </Target>
    

    You can also check this MSDN link for similar commands:

    http://www.asp.net/web-forms/tutorials/deployment/advanced-enterprise-web-deployment/running-windows-powershell-scripts-from-msbuild-project-files

    0 讨论(0)
  • 2020-12-11 03:44

    I saw a comment from a MS developer stating that publishing that goes to the 'File System' does not call MSDeployPublish target. You can see that here.

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/60b196e9-28e1-4d9d-b464-d57e42353754/vs2012-afterpublish-for-web-application?forum=msbuild

    http://sedodream.com/PermaLink,guid,b352f04a-2449-4cbb-8125-7acdef9552e1.aspx

    Digging around in the *.targets files there were a few targets I could place in the AfterTargets attribute that accomplished running after the publish had copied to the temporary obj output folder. I could never find one that ran after copying to the actual folder defined in the publish profile.

    Here is what I think you would need:

      <Target Name="BackUpRMAToIDrive" AfterTargets="CopyAllFilesToSingleFolderForPackage">
        <Exec Command="C:\deg\bat\backupRMA.cmd" />
      </Target>
    

    I'm not sure what you are backing up though - the original source or the published source. At the time of this Exec, if you need the path to the 'published files', you can pass in a parameter to your script via $(WebProjectOutputDir)\$(WPPAllFilesInSingleFolder). This would be something like c:\{path to *.csproj}\obj\{build configuration}\Package\PackageTmp.

    0 讨论(0)
提交回复
热议问题