我不能完全肯定都为什么会这样...... 所以我有一个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");
谢谢你的回应,我会试试这些 –
出于某种原因使用Assembly来获取路径而不是Directory.GetCurrentDirectory似乎已经修复它。谢谢!现在我所有的加载项都只在一个文件中。 :) –
'Directory.GetCurrentDirectory'可能不是你想要的呢。那甚至指向什么?它高度依赖于不受您控制的事物。提示:Revit开始的当前目录。取决于Revit的开始方式... –