TheSwamp

Code Red => .NET => Topic started by: Keith Brown on March 25, 2020, 04:41:49 PM

Title: WPF UserControl crashes AutoCAD
Post by: Keith Brown on March 25, 2020, 04:41:49 PM
I have an application that replaces the AutoCAD tooltips with my own custom tooltips.  Recently in AutoCAD the application will crash when trying to create the wpf user control.  Basically, the user control is an empty container that I am populating at runtime, however the control crashes AutoCAD when I new it up with this line.  (Sorry its an old application and in VB.NET)


Code - Visual Basic: [Select]
  1. Dim worxBoxToolTip = New WorxBoxToolTip()


The usercontrol itself has an empty constructor and in fact an empty class.


Code - Visual Basic: [Select]
  1. Public Class WorxBoxToolTip
  2.  
  3.  
  4. End Class


The xml for the control is :


Code: [Select]
<UserControl x:Class="WorxBoxToolTip"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid x:Name="RootGrid" HorizontalAlignment="Left" VerticalAlignment="Top">
        <TextBlock x:Name="ViewName" TextWrapping="Wrap" Text="View Name" Margin ="10,10,10,10" FontWeight="Bold" HorizontalAlignment="Left" VerticalAlignment="Top"></TextBlock>
        <DockPanel x:Name="LineContainer" HorizontalAlignment="Left" Margin="10,30,10,10" VerticalAlignment="Top">
            <StackPanel x:Name="StackPanelName" Orientation="Vertical" VerticalAlignment="Top" MaxWidth="290" />
            <WrapPanel x:Name="StackPanelValue" Orientation="Vertical" VerticalAlignment="Top" />
        </DockPanel>
    </Grid>
</UserControl>


When the code tries to new up the control it throws the following error:


Code: [Select]
System.IO.FileNotFoundException: 'Could not load file or assembly 'VIEWWorx, Version=2019.2.259.1223, Culture=neutral' or one of its dependencies. The system cannot find the file specified.'

Now obviously it can find the dll as it is the one currently loaded.  What is crazy is the version of the dll is incorrect.  The current version loaded is 2020.x.x.x.  There is no way i could reference an earlier version as it would be a circular reference.


Any ideas?
Title: Re: WPF UserControl crashes AutoCAD
Post by: Keith™ on March 25, 2020, 05:11:22 PM
I am just gonna throw some things out there to check:

Check the references in every project in the solution.
Make sure you are actually grabbing the correct build (I know sounds silly) but VS has a way of creating multiple destinations for the build.
Have you ever autoloaded the project such that there is a reference to an old path? I have a tendency to keep my old executables for those "just in case" moments. Usually I find the autoloader is pointing to folder\version12\ when it should be pointing to folder\version13\.

Anyway, I know its not much, because that you have shown is golden, don't have much to go on except the speculative.
Title: Re: WPF UserControl crashes AutoCAD
Post by: Keith Brown on March 25, 2020, 05:23:26 PM
Yup,  I checked all of the references.  What I have ended up doing is adding a resolve event handler so that if the code cannot find itself then it just returns itself.  Sounds stupid but it works.  I went with Name.StartsWith  so if by some unknown reason the version it is looking for changes it will still work.  I have spent almost a day trying to track this down and I am tired of looking so going with this.


Code - Visual Basic: [Select]
  1.      AddHandler currentDomain.AssemblyResolve, AddressOf ResolveWorxToolsHandler
  2.  
  3.     Private Function ResolveWorxToolsHandler(sender As Object, args As ResolveEventArgs) As Assembly
  4.         If (args.Name.StartsWith("VIEWWorx,")) Then
  5.             Return Assembly.GetExecutingAssembly()
  6.         End If
  7.         Return Nothing
  8.     End Function


** EDIT **


If anyone comes back to this looking for a solution, make sure you add a comma after the dll name that you are looking for.  If not it will also fire when looking for the dll resources named "VIEWWorx.resources".  The comma will stop that from happening.