我有一个NAnt脚本,可以完全构建和部署到我们的Dev环境。部署C#.Net Win exe及其使用的DLL涉及将它们移动到网络位置,我们的测试人员和其他开发人员运行它们。
<copy todir="${dest.dir}" overwrite="true" failonerror="false" >
<fileset basedir="${source.dir}" >
<include name="**/*" />
</fileset>
</copy>
现在,脚本调用Copy任务,Overwrite =“true”,但如果有人正在运行应用程序,报告
,则会失败无法将'source.dll'复制到'dest.dll'。访问路径'dest.dll'被拒绝。
“dest.dll”是EXE的主要依赖项之一,随之复制。现在,我有两个资源中的一个:我要么弄清楚谁打开它并要求他们退出,或者我发送电子邮件给我们的系统工程师,他们做了一些巫术删除锁定的文件。无论如何我可以将我自己的一些伏都教纳入NAnt脚本,所以文件副本总是成功吗?
答案 0 :(得分:1)
您有几种可能的选择。
一种方法是编写一个自定义的NAnt任务,该任务使用P / Invoke从Win32 API调用UnlockFile或UnlockFileEx方法。此任务可以包装解锁和复制操作,因此您只需要从NAnt脚本调用新任务。
另一种方法是在尝试复制之前使用NAnt exec任务并执行命令行解锁功能。