2

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

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

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

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

4

1 回答 1

1

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

修改此行:

$solutionName=" yousolution.wsp "

$SolutionPath="* H:* "+$solutionName

试试这个 power 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

在此处找到您的 dll:C:\Windows\assembly 并比较其是否已更新。

于 2013-11-11T09:51:00.330 回答