Description
Prerequisites
- Are you running the latest version?
- Are you reporting to the correct repository?
- Did you perform a cursory search?
Description
Importing fails in scenarios where a base class exposes a virtual properties that is in a nuget package and the library was built but not published.
This occurs even if that property is marked [CLSCompliant(false)].
The class that exposes that property often will import just fine, and some but not all classes that derive from it will import successfully. I've yet to decipher the pattern.
The main issue is that the error message does not identify with useful information what is wrong. It simply cannot import the type exposing the property.
Steps to Reproduce
- In C#, create a (generic?) class that exposes a public virtual property with type that comes from a nuget package.
- Derive from this class a (non-generic?) child class
- Build your solution
- Link IronPython to the resulting DLL
- Try to import the type in IronPython
Expected behavior:
- ipy identifies the dependency on a nuget package (potentially not technically possible) OR
- ipy produces a meaningful error that states the type exposed by the property cannot be found
Actual behavior:
A non-helpful error message that it cannot import one or more classes deriving from the base class that exposes the property
Work around / Solution
Publish the C# DLL, don't just build it. This should have been done in the first place - my error - but ipy gives such an unhelpful error message that it has cost a lot of development time to discover the issue.
Version Information
IronPython 3.4.2 (3.4.2.1000)
[.NETCoreApp,Version=v8.0 on .NET 8.0.11 (64-bit)]
Activity
slozier commentedon Jan 4, 2025
I tried to reproduce this but without success. Perhaps I'm missing something (or not following the repro steps properly)?
Here's my C# library:
Then in IronPython I can import
Class2without issues. If I try to use it I do get aFileNotFoundErrorwith the expected error message:Any suggestions to try and break it?
LeeReid1 commentedon Jan 5, 2025
Hey,
Thanks for taking a look into it.
I have since altered the code that lead to that exact example and not kept the old version, but something similar is as follows.
C# Code. TorchSharp is a NuGet package. Canary is there for a sanity check.
Publish then and delete the torchsharp dll or, I suppose, just build the code and check torchsharp hasn't been copied into the bin dir.
Then in python
then call
ipy <name of your python file>Some important notes:
torch.Sizeis changed to a reference type, no error occurs