2017-08-17 64 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的開始方式... –

相關問題