OWSTimer缓存程序集? SP 2010 dll问题

时间:2013-11-08 22:45:06

标签: caching sharepoint-2010 assemblies event-receiver

我有一个幻影/缓存的.dll,我无法在我的SP Farm中删除。我正在对Example.dll进行更新,其中包含我更改过的电子邮件事件接收器。重新部署到GAC并重新启动应用程序池根本不起作用。旧的dll仍在运行,尽管我竭尽全力追踪并更换它。

我知道SP Timer在内存中保存了一个版本。因此,经过数小时的阅读后,我尝试了以下内容(在服务器场中的所有服务器上):

IISRESET(通过cmd和IIS管理器) GAC部署(通过拖放和gacutil / f) 重置SPTimer(通过Services.msc和Powershell) 强制其他不相关的计时器作业运行 使用Process Explorer终止所有关联的进程 清除SP Config缓存 寻找C:\ Windows \ assembly \ temp(不存在) 最后,重新启动服务器

旧代码仍然运行!!到底是怎么回事?这个旧集会在哪里?我无法重新部署该功能,因为我的前任可能正在删除功能停用列表,它包含数千行代码,这些代码风险太大。请帮帮我!

1 个答案:

答案 0 :(得分:1)

您必须撤消解决方案,重新启动计时器,再次部署。 确保dll来自同一解决方案。

修改这一行:

$解决方案名称= “的 yousolution.wsp

$ SolutionPath =“* H:* ”+ $ solutionName

试试这个电源shell脚本:

function WaitForJobToFinish([string]$SolutionFileName)
{ 
    $JobName = "*solution-deployment*$SolutionFileName*"
    $job = Get-SPTimerJob | ?{ $_.Name -like $JobName }
    if ($job -eq $null) 
    {
        Write-Host 'Timer job not found'
    }
    else
    {
        $JobFullName = $job.Name
        Write-Host -NoNewLine "Waiting to finish job $JobFullName"

        while ((Get-SPTimerJob $JobFullName) -ne $null) 
        {
            Write-Host -NoNewLine .
            Start-Sleep -Seconds 2
        }
        Write-Host  "Finished waiting for job.."
    }
}

Add-PsSnapin Microsoft.SharePoint.PowerShell

$CurrentDir=$args[0]
$solutionName="yousolution.wsp"
#$SolutionPath=$CurrentDir + "\"+$solutionName 
$SolutionPath="H:\"+$solutionName 

Write-Host 'Going to uninstall solution'
Uninstall-SPSolution -identity $solutionName  -allwebapplications -confirm:$false

Write-Host 'Waiting for job to finish'
WaitForJobToFinish 

Write-Host 'Going to remove solution'
Remove-SPSolution -identity $solutionName -confirm:$false

Write-Host 'Restarting OWS Timer jobs'

$farm = Get-SPFarm
$farm.TimerService.Instances | foreach {$_.Stop();$_.Start();} 
 $farm = Get-SPFarm
$farm.TimerService.Instances | foreach {$_.Stop();$_.Start();} 
$farm = Get-SPFarm
$farm.TimerService.Instances | foreach {$_.Stop();$_.Start();} 
$farm = Get-SPFarm
$farm.TimerService.Instances | foreach {$_.Stop();$_.Start();} 
Write-Host 'Going to add solution'
Add-SPSolution $SolutionPath

Write-Host 'Going to install solution to all web applications'
Install-SPSolution -identity $solutionName -allwebapplications –GACDeployment -Force

Write-Host 'Waiting for job to finish' 
WaitForJobToFinish 

Remove-PsSnapin Microsoft.SharePoint.PowerShell

在这里找到你:C:\ Windows \ assembly并比较它是否已更新。