Не удалось загрузить файл или сборку в надстройке Solidworks

Я пытаюсь создать плагин Solidworks с библиотекой SolidDna от AngelSix. Я использовал стандартную настройку в соответствии с примерами:

public class Integration : AddInIntegration
{

    // All overrides left blank
    public override void ApplicationStartup()
    {
    }

    public override void ConfigureServices(FrameworkConstruction construction)
    {
    }

    public override void PreConnectToSolidWorks()
    {
    }

    public override void PreLoadPlugIns()
    {
    }
}

public class MySolidDnaPlugin : SolidPlugIn
{
    public override string AddInTitle { get; } = "foo";
    public override string AddInDescription { get; } = "bar";

    public override void ConnectedToSolidWorks()
    {
        // This works fine...
        Boo.Lang.List l = new Boo.Lang.List();

        // ....But this doesn't :(
        Boo.Lang.Compiler.BooCompiler c = new Boo.Lang.Compiler.BooCompiler();
    }

    public override void DisconnectedFromSolidWorks()
    {
    }

}

Я пытаюсь добавить поддержку сценариев в Boo, чтобы пользователи могли редактировать сценарии на лету. Я добавил ссылку на Boo.Lang.dll, Boo.Lang.Compiler.dll и Boo.Lang.Parser.dll, и все 3 DLL определенно скопированы в папку /bin.

Я могу использовать классы из пространства имен Boo.Lang, но как только я пытаюсь использовать пространство имен Boo.Lang.Compiler, возникает ошибка:

Could not load file or assembly 'Boo.Lang, Version=2.0.9.4, Culture=neutral, PublicKeyToken-32c39770e9a21a67' or one of its dependencies. The system cannot file the file specified.

Тот же код/настройка отлично работает при работе вне Solidworks, например. в консольном приложении.

В документах SolidDna показан процесс регистрации DLL плагинов с помощью regasm.exe /codebase, поэтому я попытался запустить его с тремя DLL Boo, но это не имеет никакого значения.

Любые предложения или указатели?


person Bill Peet    schedule 16.08.2018    source источник


Ответы (1)


Я предполагаю, что вы добавили эти двоичные файлы в папку addin, в то время как процесс ищет эти файлы в папке solidworks.exe.

Я предлагаю вам подтвердить это с помощью инструмента ProcMon.

Если это так, есть несколько способов решить эту проблему:

1 добавьте эти двоичные файлы в папку SolidWorks

2 добавьте эти папки в любую из папок в переменной среды пути

3 добавьте папку с надстройками в переменную среды пути

4 Если эти двоичные файлы, а также ваша надстройка являются сборками .net, вы можете использовать ilmerge, чтобы объединить их в одну.

5 Если ваша надстройка представляет собой сборку .net и у вас есть доступ к объекту appdomain, вы можете подписаться на AssemblyResolve событие и динамически предоставляет путь.

person Vlad    schedule 20.08.2018
comment
Спасибо, добавление обработчика в AppDomain.AssemblyResolve помогло. - person Bill Peet; 20.08.2018