I have a problem with loading external resources into a WPF application. The WPF app should run as a plugin for a 3rd party program. I believe it is irrelevant which program it is, but in this case it is about Autodesk Inventor.
My project structure is as follows;
- One WPF class library
- One testing app, which is a WPF application which just shows the main window and hooks into the process so for developing I can test without restarting Inventor the whole time.
- One plug-in class library, this gets loaded by the program.
Basically the test-app and the plug-in setup code are identical. Only in the plug-in there is some logic that hooks the main window to a control in the inventor interface.
Everything works fine as long as I don’t use any external packages. I want to use some packages to make my life easier. But as soon as I use some control from example MahApps, and I run the plug-in project, I get a FileNotFound exception for the package DLL. The DLL is present in the output directory though.
Because my wpf class library does not have an app.xaml, I am importing the resources in the MainWindow.
Initialization code:
public void InitializePropertyEditor()
{
AppHost = Host.CreateDefaultBuilder()
.ConfigureServices((hostContext, services) =>
{
PropertyEditorServices.ConfigureServices(hostContext, services);
})
.Build();
AppHost.Services.AddViewModelLocator();
AppHost.Start();
// create window
var mainWindow = AppHost.Services.GetRequiredService<MainWindow>();
mainWindow.WindowStyle = WindowStyle.None;
mainWindow.ResizeMode = ResizeMode.NoResize;
mainWindow.Visibility = Visibility.Visible;
var helper = new WindowInteropHelper(mainWindow);
helper.EnsureHandle();
var hwnd = helper.Handle;
propertyWindow = GetDockableWindow();
propertyWindow.DisabledDockingStates = DockingStateEnum.kDockBottom | DockingStateEnum.kDockTop;
propertyWindow.AddChild(hwnd);
HwndSource.FromHwnd(hwnd)?.AddHook(WndProc);
// perform initialization
var initService = AppHost.Services.GetRequiredService<IInitializationService>();
initService.Initialize();
}
I really have no clue why it will not work. Any ideas?