del*_*ttg 9 c# asp.net msbuild publishing batch-file
我有一个ASP.NET网络应用程序,当我进行更改或修复错误时,我发布到我们的网站.我们希望自动将项目文件的备份保存到我们的服务器(与SVN签入分开),因此我编写了一个批处理文件,将整个项目从本地驱动器复制到服务器.批处理文件在独立运行时正常工作,因此不是问题.如果这是一个问题,批处理文件不在项目的路径中.
然后我将这些行添加到结束</project>标记正上方的.csproj文件中:
<Target Name="AfterPublish" >
<Exec Command="C:\deg\bat\backupRMA.cmd" />
</Target>
Run Code Online (Sandbox Code Playgroud)
这遵循MSDN中用于覆盖目标的指令.
我也尝试过这个SO问题中概述的方法.看起来像这样:
<Target Name="BackUpRMAToIDrive" AfterTargets="MSDeployPublish" >
<Exec Command="C:\deg\bat\backupRMA.cmd" />
</Target>
Run Code Online (Sandbox Code Playgroud)
这也行不通.
为了完整性,这是批处理文件,它非常简单,但如果有人感兴趣,我可以解释这些开关:
xcopy C:\deg\ASP.NET\OnlineRMA_SinglePage\*.* /cherkyDi I:\common\AppDevBranch\Service\rma
Run Code Online (Sandbox Code Playgroud)
我使用Build> Publish RMA在VS2010中发布,效果很好.这只是备份脚本永远不会运行.唯一的共性是脚本本身.我见过其他使用源dir到目标目录的副本的例子,但我想我明白你可以通过Exec命令调用外部脚本吗? 这是我为该方法找到的SO问题的例子.
我确定我错过了一些显而易见的东西,但是我第二天就搞好了一些看似很直接的东西,所以我错过了什么?
Ter*_*rry 10
我看到MS开发人员发表评论,称发布到"文件系统"并不会调用MSDeployPublish目标.你可以在这看到.
http://sedodream.com/PermaLink,guid,b352f04a-2449-4cbb-8125-7acdef9552e1.aspx
在*.targets文件中挖掘,我可以在AfterTargets属性中放置一些目标,这些目标在发布复制到临时obj输出文件夹后完成运行.复制到发布配置文件中定义的实际文件夹后,我再也找不到了.
以下是我认为您需要的内容:
<Target Name="BackUpRMAToIDrive" AfterTargets="CopyAllFilesToSingleFolderForPackage">
<Exec Command="C:\deg\bat\backupRMA.cmd" />
</Target>
Run Code Online (Sandbox Code Playgroud)
我不确定你要备份什么 - 原始来源或已发布的来源.在此Exec时,如果您需要"已发布文件"的路径,则可以通过$(WebProjectOutputDir)\ $(WPPAllFilesInSingleFolder)将参数传递给脚本.这就像是c:\{path to *.csproj}\obj\{build configuration}\Package\PackageTmp.
当您手动运行 cmd 文件时,该脚本肯定会以管理员权限或足够的权限运行,以成功将文件复制到目标(在本例中为I:单元)。
出于安全原因,从 Visual Studio 执行脚本的线程可能具有非常有限的权限。
最好的选择是从 powershell 运行脚本,并将以下参数传递给它:
-ExecutionPolicy Unrestricted
您的XML意愿将如下所示:
<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 "& invoke-command -scriptblock {
&'$(ScriptLocation)'
}
""/>
</Target>
Run Code Online (Sandbox Code Playgroud)
您还可以检查此 MSDN 链接以获取类似的命令:
| 归档时间: |
|
| 查看次数: |
3589 次 |
| 最近记录: |