我的程序使用dotnet-gitversion.exe /updateAssemblyinfo $destFileName /ensureassemblyinfo从git标记中找到版本。它是在几个项目中作为预构建事件来完成的。当我构建整个解决方案时,有时它们并行运行,并试图同时写入$destFileName,但失败了。
这是从powershell脚本调用的,我试图锁定文件,并以某种方式将filestream传递给dotnet-gitversion,但它自dotnet-gitversion以来就没有工作,因为gitversion接受filepath而不是流。
你怎么暗示怎么解决这个问题的?
发布于 2022-02-21 00:12:20
根据实际解决方案的不同,这个答案可能不一样,但是如果正确理解,您有两个任务您无法控制,这意味着您不能通过某种dependsOn或其他什么方式连续地完成这些任务?
如果是这样的话,为了进行快速修复,如果可能的话,我只会丢弃一个锁文件,并检查其他进程是否使用它。如果您需要,甚至可以使用锁文件添加一些有关当前正在锁定它的任务的信息:
$LockFile = "$destfilename.lock"
#wait for lock to not be there anymore
while(Test-path $lockfile)
{
#Waiting for lock to dissapear
Write-host "Waiting for " + (get-content $lockfile) + " to finish.."
start-sleep -seconds 10
}
#just to make sure system is updated on start of lockfile
start-sleep -Milliseconds 300
#create lockfile
New-Item -itemtype File -path $lockfile -value $CurrentBuildTaskName -force
#Do your thing here
Remove-item -path $lockfile -force然而,从长远来看,我会尝试在构建“单独步骤”作为主构建的一部分时完全不执行这些步骤,而是将它们作为主构建的一部分。这也节省了时间,因为您不必在本质上执行相同的任务2-3次。
https://stackoverflow.com/questions/71198797
复制相似问题