Pergunta

Parece que cometi um grande erro ao fazer alguns testes com um exemplo de projeto do sharepoint.Ironicamente, eu estava tentando pico de uma unidade testável solução, sem escrever muitos dos testes primeiro.Eu ainda sou muito novo para SharePoint, e queria explorar o que posso / não posso fazer com SP e do Coi.

Assim, sem entrar em muito detalhe, eu, acidentalmente, escreveu um código que é recursiva e acaba jogando um StackOverflowException.Não é um grande negócio, certo?Basta retirar da solução e retire-a.O problema é que esse código é chamado durante uma solução de recurso FeatureUninstalling método um SPFeatureReceiver.

(Bem, não exatamente.O código acaba ficando chamado durante a SPFeatureReceiver's construtor estático.Se você está se perguntando o porquê, eu estava tentando compor o root usando o Castelo de Windsor, a fim de injetar dependências que podem ser usados durante o FeatureInstalling e FeatureUninstalling métodos).

Então, o que acontece quando tentar utilizar o centro de administração de web ou Desinstalar-SPSolution é:

  1. Uma tarefa é agendada para retrair a solução.
  2. O trabalho é executado e tenta retirar a solução.
  3. O trabalho constrói um novo SPFeatureReceiver para invocar FeatureUninstalling.
  4. O SPFeatureReceiver (estático) invoca o construtor de código que vai tentar compor a raiz, e dentro de lá, acaba jogando um StackOverflowException.
  5. Eu receber uma mensagem pop-up indicando que OWSTIMER.exe encontrou uma exceção, e pergunta se eu quero depuração.
  6. OWSTIMER.exe reinicia e volta para o passo #2.

Daí a pergunta:Como recolher um unretractable solução?

Foi útil?

Solução

Você já tentou comentar o código incorreto, a reconstrução/reformulação de pacotes e, em seguida, executar uma Update-SPSolution comando?

O FeatureUninstalling evento ocorre na remoção, e, creio eu, ele não vai ser chamado quando a atualização (que é o que o FeatureUpgrading o evento é para).

Se você pode atualizar com êxito e substituir o código correto, você seria capaz de remover com segurança a solução.

No segundo pensamento, a minha sugestão acima não funciona, porque se esta excepção está ocorrendo no construtor, ao invés de incluir o evento, obviamente que seria ainda ser chamado, independentemente da solução do método de modicação (Atualização vs.Desinstalar).Você pode substituir manualmente os .dll no GAC depois de remover o código incorreto, porém, e, em seguida, tentar uma retração.

Outras dicas

Eu tinha uma ideia semelhante para @RJ Cuthbertson resposta sobre o GAC, mas ele não me permite desinstalar nada de lá. Até que eu encontrei este:

IMPORTANTE!Nunca, jamais faça isso em um sistema de produção, e sempre volte a ligá-lo depois.

  1. Abrir Diretiva de Segurança Local MMC

  2. Ir Para Configurações De Segurança -> Diretivas Locais -> Opções De Segurança

  3. Localize "Controle De Conta De Usuário:Executar todos os administradores no de Aprovação de Administrador" e altere a configuração de Ativado para Desativado

  4. Reiniciar e agora os assemblies podem ser excluídos.

  5. Siga os passos acima para re-ativar a configuração de diretiva de segurança local e reiniciar novamente para reaplicá-lo.

Após a etapa #4 acima eu era capaz de remover Castle.Windsor.dll do GAC, e, depois, a retrair / desinstalar / remover todo trabalhado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top