Я пытаюсь реализовать архитектуру плагина для нашего решения Sharepoint в тот момент, когда администраторы могут загружать файлы DLL, которые будут установлены и обработаны нашим решением.GacInstall on Sharepoint Timer Работа a.k.a SPJobDefinition
Реализация требует установки GAC в DLL загруженном, который я достиг с помощью
private void InstallToGac(byte[] libraryContent, string filename)
{
string path = tempFolder + filename;
File.WriteAllBytes(path, libraryContent);
try
{
new System.EnterpriseServices.Internal.Publish().GacInstall(path);
}
catch (Exception ex)
{
Logger.Error("Error while installing dll to GAC.", ex);
throw;
}
finally
{
File.Delete(path);
}
}
Это просто устанавливает DLL в GAC и работает нормально, если она вызывается в Sharepoint контексте. Тем не менее, он не будет работать в многосерверной среде, так как это будет устанавливать его только на интерфейсе, где администратор загрузил файл. Итак, я переместил код выше в задание таймера, наследуя SPJobDefinition
. GacInstall больше не устанавливает DLL в GAC. В режиме отладки GacInstall
линия работает отлично, не бросая никаких исключений, но без какого-либо эффекта.
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Network Service
в задании таймера. Я работаю на одном сервере Sharepoint 2010 Foundation, но мне нужно, чтобы он работал в 2007/2010/2013 как в одном, так и в многосерверном окружении.