"Failed to initialize the [add-in name] because the assembly [path to an add-in DLL file] does not exist" 启动 Revit 时
"Failed to initialize the [add-in name] because the assembly [path to an add-in DLL file] does not exist" when launching Revit
我用尽了所有可能的资源,但无法弄清楚问题出在哪里。当我尝试使用该命令时,按钮图像不会显示并不断收到此消息。
Failed to initialize the [add-in name] because the assembly [path to an add-in DLL file] does not exist
启动 Revit 时。这是我正在使用的代码。
#region Namespaces
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.CSharp;
using System.Media;
using System.Reflection;
using System.IO.Packaging;
using System.Windows.Media.Imaging;
using System.Drawing.Imaging;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB.Architecture;
#endregion
namespace TpMechanical
{
internal class App : IExternalApplication
{
public Result OnStartup(UIControlledApplication a)
{
String tabname = "TpMechanical";
String panelname = "Tools";
//Option 1
BitmapImage b1Image = (System.Windows.Media.Imaging.BitmapImage)TpMechanical.Properties.Resources.ResourceManager.GetObject("_design3_fhY_icon.ico");
BitmapImage b2Image = (System.Windows.Media.Imaging.BitmapImage)TpMechanical.Properties.Resources.ResourceManager.GetObject("_design3_fhY_icon.ico");
BitmapImage b3Image = (System.Windows.Media.Imaging.BitmapImage)TpMechanical.Properties.Resources.ResourceManager.GetObject("_design3_fhY_icon.ico");
//Option 2
//Bitmap b1Image = (System.Drawing.Bitmap)(TpMechanical.Properties.Resources.ResourceManager.GetObject("Icon1.ico"));
//Bitmap b2Image = (System.Drawing.Bitmap)(TpMechanical.Properties.Resources.ResourceManager.GetObject("Image1.jpg"));
//Bitmap b3Image = (System.Drawing.Bitmap)(TpMechanical.Properties.Resources.ResourceManager.GetObject("Image2.bmp"));
//Option 3
//BitmapImage b1Image = new BitmapImage(new Uri("pack:application:,,,/TpMechanical/Resources/Icon1.ico"));
//BitmapImage b2Image = new BitmapImage(new Uri("pack:application:,,,/TpMechanical/Resources/Image1.jpg"));
//BitmapImage b3Image = new BitmapImage(new Uri("pack:application:,,,/TpMechanical/Resources/Image2.bmp"));
a.CreateRibbonTab(tabname);
var Tools = a.CreateRibbonPanel(tabname, panelname);
var button1 = new PushButtonData("TpButton1", "Button1", Assembly.GetExecutingAssembly().Location, "TpMechanical.command");
button1.ToolTip = " This is a short description";
button1.LongDescription = "This is a long description \n " +
"this is the second line";
var btn1 = Tools.AddItem(button1);
button1.Image = b1Image;
var button2 = new PushButtonData("TpButton2", "Button2", Assembly.GetExecutingAssembly().Location, "TpMechanical.command2");
button2.ToolTip = " This is a short description";
button2.LongDescription = "This is a long description \n " +
"this is the second line";
button2.Image = b2Image;
var button3 = new PushButtonData("TpButton3", "Button3", Assembly.GetExecutingAssembly().Location, "TpMechanical.command3");
button3.ToolTip = " This is a short description";
button3.LongDescription = "This is a long description \n " +
"this is the second line";
button3.Image = b3Image;
Tools.AddStackedItems(button2, button3);
return Result.Succeeded;
}
public Result OnShutdown(UIControlledApplication a)
{
return Result.Succeeded;
}
}
}
下面还有我的清单代码。
<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
<AddIn Type="Command">
<Text>Command TpMechanical</Text>
<Description>Some description for TpMechanical</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<Assembly>C:\My Revit- Custom Files-Revit 2021\Revit 2021 Repos\TpMechanical\bin\Debug\TpMechanical.dll</Assembly>
<FullClassName>TpMechanical.Command</FullClassName>
<ClientId>9EDCBEA6-942A-4D9A-932D-612B5E02DC9C</ClientId>
<VendorId>com.typepad.thebuildingcoder</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
<AddIn Type="Command">
<Text>Command TpMechanical</Text>
<Description>Some description for TpMechanical</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<Assembly>C:\My Revit- Custom Files-Revit 2021\Revit 2021 Repos\TpMechanical\bin\Debug\TpMechanical.dll</Assembly>
<FullClassName>TpMechanical.Command2</FullClassName>
<ClientId>1A164A1B-8B02-499A-8ADB-94A75557CD66</ClientId>
<VendorId>com.typepad.thebuildingcoder</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
<AddIn Type="Command">
<Text>Command TpMechanical</Text>
<Description>Some description for TpMechanical</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<Assembly>C:\My Revit- Custom Files-Revit 2021\Revit 2021 Repos\TpMechanical\bin\Debug\TpMechanical.dll</Assembly>
<FullClassName>TpMechanical.Command3</FullClassName>
<ClientId>C5CEC594-E407-40A8-B1B0-163DAA179CDD</ClientId>
<VendorId>com.typepad.thebuildingcoder</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
<AddIn Type="Application">
<Name>Application TpMechanical</Name>
<Assembly>C:\My Revit- Custom Files-Revit 2021\Revit 2021 Repos\TpMechanical\bin\Debug\TpMechanical.dll</Assembly>
<FullClassName>TpMechanical.App</FullClassName>
<ClientId>C12635D2-96E2-4DF4-B172-7BD9487F7AE9</ClientId>
<VendorId>com.typepad.thebuildingcoder</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
</RevitAddIns>
enter image description here
我建议您使用最少的 one-liner 外部命令和最少的 one-liner add-in 清单再试一次。
按照以下步骤操作:Revit developers guide add-in registration。
确保 Revit 对其 AddIns
文件夹具有读取权限。
不要说你用尽了所有资源。那将花费太长时间,并且可能会超过您的寿命。新资源的添加速度快于您消耗它们的速度,因此任何尝试都注定要失败。
错误信息告诉你问题不在内部实现代码,而在基本注册。
为什么要将 internal
添加到 IExternalApplication
实施中?这不是自相矛盾吗?这是什么意思?
为什么使用 The Building Coder VendorId
?那是不正确的。你不是建筑编码员。
您的 Assembly
路径很复杂并且到处都是空格。一般来说,我尽量避免这样复杂的路径和文件夹名称中的所有空格。我也更喜欢正斜杠而不是反斜杠。如果将 DLL
与 add-in 清单放在 AddIns
文件夹中的相同位置,则可以完全省略文件夹名称。
这些天我被类似的问题淹没了。这是另一个类似的,是最近一封电子邮件线程的摘要:
[Q] 我已按照 Augusto Goncalves 的 DevTV 教程深入研究 Revit 平台入门 API。 None 我的命令出现在 Revit UI > 加载项 > 外部命令中。
[A] 您应该阅读的一件事是 Revit API developers guide 的介绍部分。它准确地告诉您如何安装和启动您的 add-in。令人震惊的是,信息不清楚,但在教程中不起作用。谢谢你提出来!
安装 Revit add-in 真的很简单,但是人们 运行 遇到了你描述的困难。
只有两个相关组件:
- Add-in 清单文件
*.addin
- .NET class 库程序集
DLL
这些是重要的步骤:
- DLL 必须实现
IExternalCommand
;也就是说,它必须实现 Execute
方法。
- add-in 清单必须指向 DLL,并且必须放在 Revit Add-Ins 文件夹中以便 Revit 找到并加载它。
- 如果 DLL 和 add-in 清单都位于 Revit
AddIns
文件夹中,则可以省略完整的 DLL 路径;否则必须指定。
真的就这些了。
解释的地方千千万万;他们都说同样的话。
Revit 祝你好运,玩得开心 API :-)
[R] 自昨天以来,我的 add-in 没有出现在 Revit 外部命令中,我一直没有运气。
我已经仔细地正确构建了我的代码。 add-in 清单文件指向我的项目 .dll
文件。我的项目 class 显式实现了 IExternalCommand
接口并启动了 Execute
方法。
我不明白可能是什么问题,不确定它可能是我正在使用的 revit 版本我正在尝试找出所有可能性。
[R2] 我设法调试了我的代码。请忽略之前的消息。
我的清单 add-in 文件的位置已被锁定。我想那是在我设置帐户时完成的。该位置需要访问权限。此路径:
- C:\ProgramData\Autodesk\Revit\Addins22\
我使用 try and catch exception 来查看问题。
一旦我授予访问权限,add-in 文件现在可见;成功了!
第三次重读您的问题,听起来好像您的 add-in 正在尝试引用 Revit 尝试加载时无法找到的 .NET 程序集 DLL。查看您在源代码 using
语句中引用的命名空间列表,我只看到列出的标准 Autodesk Revit、Microsoft 和 .NET 程序集。因此,它们都应该存在并且可以访问。您是否在代码中的其他地方使用了该列表中不明显的其他内容?您可以使用 fuslogv
之类的工具在加载期间分析您的 add-in 依赖项,如 Exploring Assembly Reference DLL Hell with Fuslogvw.
注释中所建议
我用尽了所有可能的资源,但无法弄清楚问题出在哪里。当我尝试使用该命令时,按钮图像不会显示并不断收到此消息。
Failed to initialize the [add-in name] because the assembly [path to an add-in DLL file] does not exist
启动 Revit 时。这是我正在使用的代码。
#region Namespaces
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.CSharp;
using System.Media;
using System.Reflection;
using System.IO.Packaging;
using System.Windows.Media.Imaging;
using System.Drawing.Imaging;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB.Architecture;
#endregion
namespace TpMechanical
{
internal class App : IExternalApplication
{
public Result OnStartup(UIControlledApplication a)
{
String tabname = "TpMechanical";
String panelname = "Tools";
//Option 1
BitmapImage b1Image = (System.Windows.Media.Imaging.BitmapImage)TpMechanical.Properties.Resources.ResourceManager.GetObject("_design3_fhY_icon.ico");
BitmapImage b2Image = (System.Windows.Media.Imaging.BitmapImage)TpMechanical.Properties.Resources.ResourceManager.GetObject("_design3_fhY_icon.ico");
BitmapImage b3Image = (System.Windows.Media.Imaging.BitmapImage)TpMechanical.Properties.Resources.ResourceManager.GetObject("_design3_fhY_icon.ico");
//Option 2
//Bitmap b1Image = (System.Drawing.Bitmap)(TpMechanical.Properties.Resources.ResourceManager.GetObject("Icon1.ico"));
//Bitmap b2Image = (System.Drawing.Bitmap)(TpMechanical.Properties.Resources.ResourceManager.GetObject("Image1.jpg"));
//Bitmap b3Image = (System.Drawing.Bitmap)(TpMechanical.Properties.Resources.ResourceManager.GetObject("Image2.bmp"));
//Option 3
//BitmapImage b1Image = new BitmapImage(new Uri("pack:application:,,,/TpMechanical/Resources/Icon1.ico"));
//BitmapImage b2Image = new BitmapImage(new Uri("pack:application:,,,/TpMechanical/Resources/Image1.jpg"));
//BitmapImage b3Image = new BitmapImage(new Uri("pack:application:,,,/TpMechanical/Resources/Image2.bmp"));
a.CreateRibbonTab(tabname);
var Tools = a.CreateRibbonPanel(tabname, panelname);
var button1 = new PushButtonData("TpButton1", "Button1", Assembly.GetExecutingAssembly().Location, "TpMechanical.command");
button1.ToolTip = " This is a short description";
button1.LongDescription = "This is a long description \n " +
"this is the second line";
var btn1 = Tools.AddItem(button1);
button1.Image = b1Image;
var button2 = new PushButtonData("TpButton2", "Button2", Assembly.GetExecutingAssembly().Location, "TpMechanical.command2");
button2.ToolTip = " This is a short description";
button2.LongDescription = "This is a long description \n " +
"this is the second line";
button2.Image = b2Image;
var button3 = new PushButtonData("TpButton3", "Button3", Assembly.GetExecutingAssembly().Location, "TpMechanical.command3");
button3.ToolTip = " This is a short description";
button3.LongDescription = "This is a long description \n " +
"this is the second line";
button3.Image = b3Image;
Tools.AddStackedItems(button2, button3);
return Result.Succeeded;
}
public Result OnShutdown(UIControlledApplication a)
{
return Result.Succeeded;
}
}
}
下面还有我的清单代码。
<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
<AddIn Type="Command">
<Text>Command TpMechanical</Text>
<Description>Some description for TpMechanical</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<Assembly>C:\My Revit- Custom Files-Revit 2021\Revit 2021 Repos\TpMechanical\bin\Debug\TpMechanical.dll</Assembly>
<FullClassName>TpMechanical.Command</FullClassName>
<ClientId>9EDCBEA6-942A-4D9A-932D-612B5E02DC9C</ClientId>
<VendorId>com.typepad.thebuildingcoder</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
<AddIn Type="Command">
<Text>Command TpMechanical</Text>
<Description>Some description for TpMechanical</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<Assembly>C:\My Revit- Custom Files-Revit 2021\Revit 2021 Repos\TpMechanical\bin\Debug\TpMechanical.dll</Assembly>
<FullClassName>TpMechanical.Command2</FullClassName>
<ClientId>1A164A1B-8B02-499A-8ADB-94A75557CD66</ClientId>
<VendorId>com.typepad.thebuildingcoder</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
<AddIn Type="Command">
<Text>Command TpMechanical</Text>
<Description>Some description for TpMechanical</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<Assembly>C:\My Revit- Custom Files-Revit 2021\Revit 2021 Repos\TpMechanical\bin\Debug\TpMechanical.dll</Assembly>
<FullClassName>TpMechanical.Command3</FullClassName>
<ClientId>C5CEC594-E407-40A8-B1B0-163DAA179CDD</ClientId>
<VendorId>com.typepad.thebuildingcoder</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
<AddIn Type="Application">
<Name>Application TpMechanical</Name>
<Assembly>C:\My Revit- Custom Files-Revit 2021\Revit 2021 Repos\TpMechanical\bin\Debug\TpMechanical.dll</Assembly>
<FullClassName>TpMechanical.App</FullClassName>
<ClientId>C12635D2-96E2-4DF4-B172-7BD9487F7AE9</ClientId>
<VendorId>com.typepad.thebuildingcoder</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
</RevitAddIns>
enter image description here
我建议您使用最少的 one-liner 外部命令和最少的 one-liner add-in 清单再试一次。
按照以下步骤操作:Revit developers guide add-in registration。
确保 Revit 对其 AddIns
文件夹具有读取权限。
不要说你用尽了所有资源。那将花费太长时间,并且可能会超过您的寿命。新资源的添加速度快于您消耗它们的速度,因此任何尝试都注定要失败。
错误信息告诉你问题不在内部实现代码,而在基本注册。
为什么要将 internal
添加到 IExternalApplication
实施中?这不是自相矛盾吗?这是什么意思?
为什么使用 The Building Coder VendorId
?那是不正确的。你不是建筑编码员。
您的 Assembly
路径很复杂并且到处都是空格。一般来说,我尽量避免这样复杂的路径和文件夹名称中的所有空格。我也更喜欢正斜杠而不是反斜杠。如果将 DLL
与 add-in 清单放在 AddIns
文件夹中的相同位置,则可以完全省略文件夹名称。
这些天我被类似的问题淹没了。这是另一个类似的,是最近一封电子邮件线程的摘要:
[Q] 我已按照 Augusto Goncalves 的 DevTV 教程深入研究 Revit 平台入门 API。 None 我的命令出现在 Revit UI > 加载项 > 外部命令中。
[A] 您应该阅读的一件事是 Revit API developers guide 的介绍部分。它准确地告诉您如何安装和启动您的 add-in。令人震惊的是,信息不清楚,但在教程中不起作用。谢谢你提出来!
安装 Revit add-in 真的很简单,但是人们 运行 遇到了你描述的困难。
只有两个相关组件:
- Add-in 清单文件
*.addin
- .NET class 库程序集
DLL
这些是重要的步骤:
- DLL 必须实现
IExternalCommand
;也就是说,它必须实现Execute
方法。 - add-in 清单必须指向 DLL,并且必须放在 Revit Add-Ins 文件夹中以便 Revit 找到并加载它。
- 如果 DLL 和 add-in 清单都位于 Revit
AddIns
文件夹中,则可以省略完整的 DLL 路径;否则必须指定。
真的就这些了。
解释的地方千千万万;他们都说同样的话。
Revit 祝你好运,玩得开心 API :-)
[R] 自昨天以来,我的 add-in 没有出现在 Revit 外部命令中,我一直没有运气。
我已经仔细地正确构建了我的代码。 add-in 清单文件指向我的项目 .dll
文件。我的项目 class 显式实现了 IExternalCommand
接口并启动了 Execute
方法。
我不明白可能是什么问题,不确定它可能是我正在使用的 revit 版本我正在尝试找出所有可能性。
[R2] 我设法调试了我的代码。请忽略之前的消息。
我的清单 add-in 文件的位置已被锁定。我想那是在我设置帐户时完成的。该位置需要访问权限。此路径:
- C:\ProgramData\Autodesk\Revit\Addins22\
我使用 try and catch exception 来查看问题。
一旦我授予访问权限,add-in 文件现在可见;成功了!
第三次重读您的问题,听起来好像您的 add-in 正在尝试引用 Revit 尝试加载时无法找到的 .NET 程序集 DLL。查看您在源代码 using
语句中引用的命名空间列表,我只看到列出的标准 Autodesk Revit、Microsoft 和 .NET 程序集。因此,它们都应该存在并且可以访问。您是否在代码中的其他地方使用了该列表中不明显的其他内容?您可以使用 fuslogv
之类的工具在加载期间分析您的 add-in 依赖项,如 Exploring Assembly Reference DLL Hell with Fuslogvw.