Revit API:使用字符串作为按钮程序集名称和当前路径

时间:2017-08-17 14:35:33

标签: c# revit-api revit

我完全不确定为什么会发生这种情况...... 所以我有一个ExternalCommand和一个用于制作功能区选项卡和按钮的应用程序。这两个程序在同一个解决方案中并位于相同的命名空间下,这使我可以处理更少的文件。当我为我的命令创建一个按钮时,我想要放入当前正在运行的应用程序的当前路径。我用Directory.GetCurrentDirectory() + \AddInsAll\Ribbon17.dll执行此操作(其中AddInsAll是文件夹,而Ribbon17显然是dll)。我在必要时使用@来避免转义序列。此字符串包含所需的确切程序集名称,但Revit告诉我“程序集不存在”。如果我用硬编码的C:\ProgramData\Autodesk\Revit\Addins\2017\AddInsAll\Ribbon17.dll替换这个String变量,它就可以工作。我希望它显然比那更强大。我的代码将在下面,提前感谢。

仅供参考:我有一个TaskDialog显示它第一次运行时,它返回的fullPath与硬编码路径非常相似。由于get目录存在一些奇怪的错误,我必须进行替换(Program Files to ProgramData)。此外,我将“\ AddInsAll \ Ribbon17.dll”添加到字符串的末尾,因为CurrentDirectory仅发送到Addins \ 2017。最后,如果你认为这个问题是由@s引起的,那么我已经尝试过将它从变量中删除,并且没有任何尝试可行。但如果你认为它们是问题,我欢迎这个建议。感谢。

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");

1 个答案:

答案 0 :(得分:0)

我建议你跳过@并用正斜杠替换每个反斜杠\ /。

KISS

更好的是,使用类似于HoloLens Escape Path Waypoint JSON ExporterCreateRibbonTab实现的方法。