Search code examples
sharepointiissharepoint-2013profilerjit

Rewriting IL using custom .net profiler in Microsoft SharePoint 2013 (IIS Server)


I'm writing a custom .net profiler to rewrite some methods in SharePoint 2013 on the fly. The Class I'm interested is Microsoft.SharePoint.Utilities.DateOptions.

I've implemented ICorProfilerCallback::JITCompilationStarted and ICorProfilerCallback::JITCachedFunctionSearchStarted in my profiler and am currently just logging all functions being compiled. Also, I've set eventFlags as follows

DWORD eventMask =
    COR_PRF_DISABLE_ALL_NGEN_IMAGES |
    COR_PRF_DISABLE_INLINING |
    COR_PRF_MONITOR_JIT_COMPILATION |
    COR_PRF_MONITOR_CACHE_SEARCHES;

The problem is, No matter what I do, no method of DateOptions class will be compiled. I am sure that it should be called, and I've already tested my changes by disassembling, updating code, and reassembling it's DLL. I can see other classes in the same namespace loading and compiling (and can successfully rewrite them) but not this one. The decision to use a profiler for the job is a business decision and can not be reverted.

One point of interest is that this class is used on the code generating the page and its web parts, and I can see no other related classes in this code-path too.

I've enabled my profiler system-wide using system environment variables, and have tried rebooting so it will profile everything from startup to no avail.

Am I missing something here?

Edit: I guess it should be some setting inside IIS or something. I can see all normal classes and namespaces, but nothing that runs while rendering the page in IIS.


Solution

  • I finally solved my problem. It was kind of a dumb mistake I guess, but still I'm putting it here so no one else gets stuck like me!

    I was using a specific folder on my C drive for development, and ASP.Net user account did not have read privileges to that folder, and could not load the profiler.

    Parts of the process was run using a privileged account so I was able to log and rewrite it's functions, but the web rendering parts were under a limited account.

    Copying the dll to System32 folder fixed all my problems.