目前,我正在尝试为我们的 Sharepoint 解决方案实施插件架构,管理员可以上传将由我们的解决方案安装和处理的 dll 文件。
实施需要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 单服务器和多服务器环境中工作。