How to debug PDSOE Could not find class or interface . (12886) error - Forum - OpenEdge Development - Progress Community

How to debug PDSOE Could not find class or interface . (12886) error

 Forum

How to debug PDSOE Could not find class or interface . (12886) error

This question is answered

I have a OE.Net class that uses a user control build around a telerik control.

One some machines the source compiles, on others it doesn't.

All machines use a local copy of the same assemblies directory,

All machines use oe11.6.2

code :

define variable telerikXHtmlEditorControl1 as class TelerikMarkupEditorLibrary.TelerikXHtmlEditorControl no-undo.

shows following error

- Could not find class or interface TelerikMarkupEditorLibrary.TelerikXHtmlEditorControl. (12886)

The referenced assemblies look ok

The class browser looks ok

Verified Answer
  • A full compile fixed the runtime issue,

    Now I get a Telerik Nag screen prompting me to "Purchase now" at run-time. No option to enter my existing license info :-( but that will be another issue.

    Thank you for your assistance,

    from what I can tell the solution came with the service pack installation.

All Replies
  • Does the assemblies directory just contain assemblies.xml or are the Telerik dlls there as well?  If not, where are they?

  • There is an assemblies.config file containing

    <configuration>
     <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" >
        <probing privatePath="CCE;Consultingwerk;Infragistics;Microsoft;Apache;Support;Telerik;C1;ZeroMQ;graphviz;Net" />
      </assemblyBinding>
     </runtime>
    </configuration>
    

    All Telerik components are in the Assemblies subdirectory. On my laptop thy are also installed locally

    Our component is in the CCE subdirectory.

  • What do you mean "installed locally"?  So does that mean the assemblies are in the GAC?   i.e., You can just have the assembly dlls sitting there in the directory, or they can be installed in the Global Assembly Cache.  Is your laptop where it works or where it doesn't work?  Is it "installed locally" on the machines where it does not work?  

    I don't know anything about an assemblies.config file!  There is a .config file for the executable (e.g., prowin32.exe.config) which serves this purpose.  Do you have the name right?

  • To address Laura's last question: yes, assemblies.config is correct, it is the app config file in the assemblies directory that configures the CLR when loading assemblies from the assemblies directory.

    However, the answers to Laura's other questions will possibly hold the key to figuring this out.

    In the past, I have used Fusion Log Viewer (fuslogvw) to watch the binding, which can identify the cause of the binding failure. It might have improved since I played with it many years ago, but at the time it was not very friendly, although I persisted with it to figure things out. There might even be better tools available now.

  • My previous post should have read : All Telerik components are in the Telerik  subdirectory of the assemblies directory.

    > What do you mean "installed locally"?

    Using the Telerik Control Panel application . I don't think it copies to the GAC, only to c:\programm files\telerik\

    It doesn't work on my laptop, the setup on the laptop where it does work is similar.

    > I don't know anything about an assemblies.config file!  There is a .config file for the executable (e.g.,

    > prowin32.exe.config) which serves this purpose.  Do you have the name right?

    assemblies.config allows you to put the dll's into subdirectories instead of one huge directory, it's a trick I learned from Mike Fechner, it is mentioned on documentation.progress.com/.../index.html , The probing tag is explained on msdn.microsoft.com/.../823z9h8w(v=vs.110).aspx

    I don't think the assemblies.config causes the issue but I'll test without.

  • I'll try fuslogvw to see if it shows extra info.

    Is there a way to query a run ABL.Net session to see which assemblies got loaded ?

  • There is no way directly with ABL to see what assemblies have been loaded by .NET. If there is .NET functionality available to list what assemblies have been loaded for the current AppDomain, you could always try calling that from ABL. I don't know if there is such a thing in .NET, just hypothesizing.

    Having the AVM generate a list of the things it asks .NET to load would be an enhancement request. It would be an incomplete list, as the CLR will load dependencies based on its own rules, and the AVM would not know about them. Something that gives insight into the CLR would be much more helpful.

  • Hmmm... MSDN suggests AppDomain.GetAssemblies(). Does that help?

  • Maybe the following snippet might be useful to you. It shows from where an assembly was loaded, GAC vs file system. It will display an error for one of the internal assemblies, you can ignore that.

    DEF VAR oAppDomain AS System.AppDomain NO-UNDO.
    DEF VAR oAssemblies AS System.Reflection.Assembly EXTENT NO-UNDO.
    DEFINE VARIABLE ictr AS INTEGER     NO-UNDO.
    
    oAppDomain = System.AppDomain:CurrentDomain.
    oAssemblies = oAppDomain:GetAssemblies().
    
    DO ictr = 1 TO EXTENT(oAssemblies):
        DISPLAY 
        oAssemblies[ictr]:FullName FORMAT "x(128)"
        oAssemblies[ictr]:Location FORMAT "x(70)"
            WITH DOWN FRAME f1 WIDTH 132.
        DOWN WITH FRAME f1.
    END.
    
  • The compilation error problem is gone after installing service pack oe11.6.3, was oe11.6.2.

    I don't think the service pack itself fixed it, because all other machines are still using 11.6.2, but maybe something the installer did.

    I'm getting runtime errors now but these could be something else altogether

    ---------------------------

    System.NullReferenceException: Poging om gebruik te maken van een.NET-object dat is vrijgegeven. (15561)

    ---------------------------

    translates to "Attempt to reference a .Net object that has been released".

    fuslogvw doesn"t show anything

  • Thank you for the code sample, I tweaked it a bit,

    • bigger window
    • repeat instead of do, so that it continues after an error
    DEF VAR oAppDomain AS System.AppDomain NO-UNDO.
    DEF VAR oAssemblies AS System.Reflection.Assembly EXTENT NO-UNDO.
    DEFINE VARIABLE ictr AS INTEGER     NO-UNDO.
     
    current-window = default-window.
    assign
        DEFAULT-WINDOW:ROW = 1
        DEFAULT-WINDOW:COLUMN = 1
        default-window:width-chars = 220
        default-window:height-chars = 28
        default-window:font = 1.
    
    oAppDomain = System.AppDomain:CurrentDomain.
    oAssemblies = oAppDomain:GetAssemblies().
     
    repeat ictr = 1 TO EXTENT(oAssemblies) with frame f1 width 220:
        display ictr form "zz9" with frame f1 .
        DISPLAY 
            oAssemblies[ictr]:FullName FORMAT "x(128)" 
            oAssemblies[ictr]:Location FORMAT "x(70)"
            WITH DOWN FRAME f1 WIDTH 220.
        DOWN WITH FRAME f1.
    END.
  • A full compile fixed the runtime issue,

    Now I get a Telerik Nag screen prompting me to "Purchase now" at run-time. No option to enter my existing license info :-( but that will be another issue.

    Thank you for your assistance,

    from what I can tell the solution came with the service pack installation.

  • We had a second instance of the same issue on another computer, installing the service pack fixed it again. I don't know what the installer does to fix the issue but it obviously does something.