-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RID specific assets in component dependency resolution on self-contained apps #3659
Comments
The proposed solution is to include the RID fallback graph in self-contained app's See the SDK issue for this: dotnet/sdk#3361 |
See also https://github.com/dotnet/core-setup/issues/1846 for a related proposal - |
@eerhardt I am aware of that one - it's related but not quite the same. In this case there's no RID graph at all, so it's really just a matter of taking the RID graph from the app instead of a framework - in fact the host change is trivial, the meat of the change is in the SDK to actually bake the RID graph into the app's In #2663 it becomes a little trickier as we would have to somehow merge two graphs - one potentially coming from the framework and another from the app. Maybe it's trivial (we use the app, and if that doesn't work, we use the framework, or something like that) - but it's a little bit more complex problem. There's also no good authoring story - other than But I definitely see value in both. |
The scenario is using
AssemblyDependencyResolver
to dynamically load a component when running in a self-contained app.The component can be portable, that means it has all necessary assets for all platforms included in it. It's
.deps.json
will haveruntimeTarget
sections which will describe which assets are to be used by which RID. For example it might have a nativemycode.dll
for Windows andlibmycode.so
for Linux.In order for the dependency resolution to work correctly it needs to have a RID fallback graph. That is a data structure which describes how the various RIDs fallback. So for example it states that
win10-x64
falls back towin-x64
. That means that if we're running onwin10-x64
and there are nowin10-x64
specific assets, as a next step look atwin-x64
assets and use those if available.For applications the RID fallback graph is read from the
Microsoft.NETCore.App.deps.json
which is part of theMicrosoft.NETCore.App
framework. The RID fallback graph is only needed for portable apps and those must be framework dependent.Self-contained apps are always RID specific and thus they only contain assets for the target RID. The RID resolution is performed at build time by the SDK/NuGet. So the
.deps.json
of a self-contained app does not include the RID fallback graph.When
AssemblyDependencyResolver
is used it takes the RID fallback graph from the app. For framework dependent apps that will come from the core framework and everything works. But for self-contained apps, there's no RID fallback graph in the app. The result is that portable components don't work well when hosted by self-contained apps.There's currently no workaround as there's no way to make SDK include the RID fallback graph in self-contained apps and similarly the component can't carry the RID fallback graph with it.
The text was updated successfully, but these errors were encountered: