microsoft / CLRInstrumentationEngine

The CLR Instrumentation Engine is a cooperation profiler that allows running multiple profiling extensions in the same process.
Other
94 stars 48 forks source link

Consider NuGet package deployment for Instrumentation Engine #64

Open WilliamXieMSFT opened 5 years ago

WilliamXieMSFT commented 5 years ago

Providing Instrumentation Engine as a NuGet package would allow profilers to deploy with the app.

This model however would be difficult to cooperate on (if two profilers require different CLRIE versions, the user must resolve this). Consider providing guidance/documentation on how to use CLRIE NuGet in a cooperative manner.

SamB commented 3 years ago

How does that differ from the same situation, only without NuGet? Who resolves the mismatch in that scenario?

WilliamXieMSFT commented 3 years ago

Hi @SamB, appreciate you joining in the conversation. Ultimately the responsibility is on the user that's setting up their environment. Our concern is when profiler authors greedily use CLRIE in a non-cooperative manner (for example, overriding the environment variables).

Currently we ship an MSI which has a profiler proxy. One idea was to ship the Profiler Proxy dll in a nuget package and ask profiler authors to include installing CLRIE MSI in their instructions to users.

sanikolov commented 3 years ago

@WilliamXieMSFT you wrote Currently we ship an MSI which has a profiler proxy. Can you provide a link to it? I searched on nuget. Nothing there other than Microsoft.InstrumentationEngine.Headers 1.0.42. If it exists I'd like to start pulling it down in our CI. W.r.t different CLRIE versions shouldn't the latest version found by the proxy be the right one for all profilers? If not this means that newer CLRIE versions may differ from older ones in ways that break profilers developed against the older versions. If you are aware of such cases please share them in the docs. My impression is that in the original design this was not thought possible or likely.

WilliamXieMSFT commented 3 years ago

@Sanikolov Sure, our currently released MSI is available at https://github.com/microsoft/CLRInstrumentationEngine/blob/main/docs/releases.md Currently the latest one we ship is quite old (1.0.31), but we can update this to newer versions.

CLRIE's design should always be backwards compatible - newer versions of CLRIE should always support older profilers. However should there be a need for CLRIE to introduce an API breaking change (security or design conflicts) then we will update the major version to n+1 and there would be a newer profiler proxy that would target the newer version. We have versioned the proxy such that v1 will target CLRIE version 1.x (more details here: https://github.com/microsoft/CLRInstrumentationEngine/blob/main/docs/profilerproxy.md#using-the-proxy)

sanikolov commented 3 years ago

Great, thanks for the explanation. Please make version 1.0.36 available as a MSI. Also consider having a placeholder for the latest v1 version, similar to how the VS redistributables can be downloaded, e.g. https://aka.ms/vs/16/release/vc_redist.x64.exe always points to the latest v16 as more minor versions come out.