我正在尝试使用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外部运行时,相同的代码/设置可以正常工作,例如在控制台应用程序中。
SolidDna文档显示了使用regasm.exe /codebase
注册插件DLL的过程,因此我尝试使用3个Boo DLL来运行该插件,但这没有任何区别。
有什么建议或建议吗?
答案 0 :(得分:1)
我的猜测是,您将这些二进制文件添加到了addin文件夹中,而进程正在solidworks.exe文件夹中寻找这些文件。
我建议您使用ProcMon工具进行确认。
如果是这种情况,有多种解决方法:
1将这些二进制文件添加到solidworks文件夹
2将这些文件夹添加到路径环境变量中的任何文件夹中
3将您的addin文件夹添加到路径环境变量
4如果这些二进制文件以及您的插件都是.net程序集,则可以使用ilmerge将它们组合为一个。
5如果您的插件是.net程序集,并且您有权访问appdomain对象,则可以订阅AssemblyResolve事件并动态提供路径。