Prise icon indicating copy to clipboard operation
Prise copied to clipboard

Plugin not found during scanning because of folder "runtimes"

Open Narumanu opened this issue 3 years ago • 3 comments

Hello ! I'm a student and for my internship, I've been trying to develop a 100% modular architecture and that's how I found your framework. I've been trying to activate a SQL plugin using Entity, but the plugin is never found when the publish folder is scanned with the PluginLoader. Here's the csproj of my plugin : image It's pretty much identical to your SqlPlugin in your samples.

To see if the problem came from my Prise configuration, I tried to implement the same contract with a test project without the Entity dependencies and it worked ! Since the only difference I've noticed in my publish folder was the lack of a folder called "runtimes", I re-published my normal sql plugin and deleted the folder. Now the plugin is scanned and found, but it can't be activated. Here's the stacktrace just in case : image

I suppose this was to be expected, but now I'm a bit stuck and I don't understand how the folder can stop the loader from finding my plugin...

Also, all the projects I've been talking about have .NET 5.0 as their TargetFramework, except for my Contract which is aiming for netstandard2.0.

Do you have any idea how I could solve this ? Thanks in advance and sorry if I wasn't clear enough !

Narumanu avatar Apr 06 '21 15:04 Narumanu

Hi,

Thank you for your extensive description. I will try to reproduce this behaviour locally first and get back to you.

Cheers, M

merken avatar Apr 06 '21 18:04 merken

I'm unable to reproduce your issue.

I've updated the Example.Console and Plugin.Sql code to .NET5 and have it working without major changes, check out this PR: https://github.com/merken/Prise/pull/48

I'm not sure what kind of database you're running, if you need a running instance (using Docker) you can check out this article: https://medium.com/agilix/docker-express-running-a-local-sql-server-express-204890cff699

You can find a SQL script to create the example SQL database, table and data in the PR.

And you must add the correct user secret to your Host app (Example.Console) : dotnet user-secrets set "SQL:ConnectionString" "Server=localhost,1433;Initial Catalog=TestDb;Integrated Security=False;User Id=sa;Password=MyPass@word;

About the runtimes folder... This folder contains platform specific resources, some Nuget dependencies require this to be included, because they need to interop with the operating system. SQL dependencies require these libraries, you will find out that the Plugin.SQL example does so, too.

Could you please try running the example in NET5? Please share some info about the environment you're developing on (OS, Platform, SQL Server version, ...) ?

Kr, M

merken avatar Apr 07 '21 07:04 merken

Hello again, thank you for your quick answers ! As you suggested, I've done some more testing with your examples (thank you for thoses) and I've managed to make it work.

I'm not sure why, but it only works when "includeProjectNameInPublishDir" in my prise.plugin.json is set to true. I've thought by putting all the dlls into the same folder, I could avoid some redundancy but maybe I missed something about that in the tutorial.

Is it a normal behavior ? If it's not, here's my environnement :

  • IDE : Visual Studio 2020 16.8.5
  • OS : Windows 10 Family 19041.867
  • I was trying to connect to a local SQL Server DB

How I was scanning for my plugin : image

Thank you in advance !

Narumanu avatar Apr 07 '21 16:04 Narumanu