代码之家  ›  专栏  ›  技术社区  ›  Bill Peet

无法在Solidworks加载项中加载文件或程序集

  •  1
  • Bill Peet  · 技术社区  · 7 年前

    我试图用AngelSix的SolidDna库创建一个Solidworks插件。 我已经按照示例使用了标准设置:

    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外部运行时(例如在控制台应用程序中),相同的代码/设置工作正常。

    regasm.exe /codebase ,所以我试着用3个Boo dll运行它,但这没有任何区别。

    有什么建议或建议吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Vlad    7 年前

    我猜是您将这些二进制文件添加到了addin文件夹,而进程正在solidworks.exe文件夹中查找这些文件。

    我建议你确认一下 ProcMon 工具。

    如果是这样,有多种方法可以解决此问题:

    1将这些二进制文件添加到solidworks文件夹

    2将这些文件夹添加到path环境变量中的任何文件夹中

    4如果这些二进制文件和加载项都是.net程序集,则可以使用ilmerge将它们合并为一个程序集。

    AssemblyResolve 事件并动态提供路径。