我完全不知道为什么会发生这种情况...... 所以我有一个外部命令和一个用于制作功能区选项卡和按钮的应用程序。这两个程序位于同一解决方案中并且位于同一命名空间下,这使我可以处理更少的文件。 当我为命令创建按钮时,我想输入当前正在运行的应用程序的当前路径。我使用
Directory.GetCurrentDirectory() + \AddInsAll\Ribbon17.dll
执行此操作(显然,其中 AddInsAll 是文件夹,Ribbon17 是 dll)。我在必要时使用 @ 以避免转义序列。该字符串包含所需的确切程序集名称,但 Revit 告诉我“程序集不存在”。如果我用硬编码的 C:\ProgramData\Autodesk\Revit\Addins\2017\AddInsAll\Ribbon17.dll
替换这个字符串变量,它就可以工作。我希望它显然比这更强大。我的代码将在下面,提前谢谢。
仅供参考:我有一个 TaskDialog 显示它何时首次运行,并且它返回的 fullPath 与硬编码路径完全相同。由于 get 目录存在一些奇怪的错误,我必须进行替换(Program Files 到 ProgramData)。另外,我将“\AddInsAll\Ribbon17.dll”添加到字符串末尾,因为 CurrentDirectory 仅转到 Addins�7。最后,如果您认为问题是由于@造成的,我已经尝试过将其放入变量并将其从变量中取出,但所有尝试都不起作用。但如果您认为是他们的问题,我欢迎您的建议。谢谢。
public class RibApp : IExternalApplication
{
public Result OnStartup(Autodesk.Revit.UI.UIControlledApplication application)
{
// Create a custom ribbon tab
String tabName = "Add-Ins";
String fakeFullPath = @Directory.GetCurrentDirectory() + @"\AddInsAll\Ribbon17.dll";
String fullPath = fakeFullPath.Replace(@"\Program Files\", @"\ProgramData\");
TaskDialog.Show("Hi", @fullPath);
application.CreateRibbonTab(tabName);
//Create buttons and panel
// Create two push buttons
PushButtonData CommandButton = new PushButtonData("Command17", "Command",
@fullPath, "Ribbon17.Command");
我建议您跳过 @ 并将每个反斜杠 \ 替换为正斜杠 /。
亲吻!
更好的是,使用与
HoloLens Escape Path Waypoint JSON Exporter中的
CreateRibbonTab
实现类似的方法。
如果有人仍然面临同样的问题,我建议使用以下方法:
string dllFilePath =@"thePathForyourDLL.dll"
Assembly.LoadFrom(dllFilePath);
PushButtonData CommandButton = new PushButtonData(
"Command17",
"Command",
dllFilePath ,
"Ribbon17.Command");
并且在
PlatformTarget
和 Command
项目的两个单独解决方案时,Application
设置保持一致
使用 LoadFrom 将确保文件从 filePath 而不是从 GAC 加载