2017-08-17 91 views
0

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

FYI:我有一个TaskDialog其实表示时,第一次运行,并且它返回FULLPATH是exacly一样的硬编码路径。由于get目录中存在一些奇怪的错误,我必须进行替换(Program Files到ProgramData)。另外,我想补充“\ AddInsAll \ Ribbon17.dll”字符串的结尾,因为使用currentDirectory只能进入加载项\ 2017年。最后,如果你认为问题是由于@的,我已经尝试把它和取下来的变量,没有尝试的工作。但是如果你认为它们是问题,我很欢迎这个建议。谢谢。

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

回答

0

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

KISS

更好的是,使用与HoloLens Escape Path Waypoint JSON Exporter中的CreateRibbonTab执行类似的方法。

+0

谢谢你的回应,我会试试这些 –

+0

出于某种原因使用Assembly来获取路径而不是Directory.GetCurrentDirectory似乎已经修复它。谢谢!现在我所有的加载项都只在一个文件中。 :) –

+0

'Directory.GetCurrentDirectory'可能不是你想要的呢。那甚至指向什么?它高度依赖于不受您控制的事物。提示:Revit开始的当前目录。取决于Revit的开始方式... –

相关问题