# 开发环境

- 操作系统： Windows 11 (开发环境)
- Navisworks 版本： Navisworks 2017 Manage 或 Simulate (需安装以获取 SDK)
- 集成开发环境 (IDE)： Microsoft Visual Studio 2017 或更高版本 (推荐 Visual Studio 2022)
- .NET Framework： 目标.NET Framework 4.6 (或更高兼容版本，如 4.8)
- 安装程序工具： WiX Toolset
- 版本控制： Git (可选，但强烈推荐)

- 确保在 Visual Studio 项目中正确引用 Navisworks 2017 SDK 中的程序集，并将它们的“复制本地”属性设置为 False，以避免在插件部署时出现问题 。  

好的，在 Visual Studio 2022 中为 Navisworks 插件创建项目，您需要选择正确的项目模板并进行一些关键配置。

以下是详细的操作步骤：

## 1. 创建新项目

1. **打开 Visual Studio 2022。**
2. 在启动界面，选择 **“创建新项目”**。
3. 在“创建新项目”对话框中：
    - 在顶部的搜索框中输入 **"Class Library"** (类库)。
    - 在结果列表中，选择 **“类库 (.NET Framework)”**。请务必选择 `.NET Framework` 版本，而不是 `.NET` 或 `.NET Standard`，因为 Navisworks 2017 插件是基于.NET Framework 的。
    - 点击 **“下一步”**。
4. 在“配置新项目”对话框中：
    - **项目名称 (Project name):** 输入您的插件名称，例如 `NavisworksLogisticsPlugin`。这个名称很重要，因为它将用于插件的部署文件夹名称 [1]。
    - **位置 (Location):** 选择一个您希望保存项目文件的本地文件夹。
    - **解决方案名称 (Solution name):** 可以与项目名称相同，或者根据您的偏好设置。
    - 点击 **“下一步”**。
5. 在“其他信息”对话框中：
    - **框架 (Framework):** 在下拉菜单中，选择 **“.NET Framework 4.6”**。这是 Navisworks 2017 API 所需的最低兼容版本。如果您的 Visual Studio 默认没有 4.6，可以选择 4.8，因为 4.8 兼容 4.6 及更早的 4.x 版本。
    - 点击 **“创建”**。

现在，您已经创建了一个空的 C# 类库项目。

## 2. 添加 Navisworks API 引用

接下来，您需要将 Navisworks API 的核心 DLL 文件添加到您的项目中。这些文件通常位于 Navisworks 2017 的安装目录下的 `api\` 文件夹中 [2, 1]。

1. 在 Visual Studio 的 **“解决方案资源管理器”** 中，右键点击您的项目（例如 `NavisworksLogisticsPlugin`）。
2. 选择 **“添加”** > **“项目引用...”** (Add > Project Reference...)。
3. 在“引用管理器”对话框中，选择左侧的 **“浏览”** (Browse)。
4. 点击右下角的 **“浏览...”** (Browse...) 按钮。
5. 导航到您的 Navisworks 2017 安装目录。通常路径是：
    `C:\Program Files\Autodesk\Navisworks Manage 2017\api\net\` (如果您安装的是 Manage 版本)
    或
    `C:\Program Files\Autodesk\Navisworks Simulate 2017\api\net\` (如果您安装的是 Simulate 版本)
6. 在该目录下，选择以下所有 DLL 文件并点击 **“添加”**：
    - `Autodesk.Navisworks.Api.dll` [1]
    - `Autodesk.Navisworks.ComApi.dll` [1]
    - `Autodesk.Navisworks.Interop.ComApi.dll` [1]
    - `Autodesk.Navisworks.Interop.ComApiAutomation.dll` [1]
7. 点击 **“确定”** 关闭“引用管理器”对话框。

## 3. 配置引用属性 (重要步骤)

为了确保插件正确加载并避免冲突，您需要修改这些引用的一个属性：

1. 在 **“解决方案资源管理器”** 中，展开您的项目下的 **“引用”** (References) 节点。
2. 逐个选择您刚刚添加的 Navisworks DLL 引用（例如 `Autodesk.Navisworks.Api`）。
3. 在 Visual Studio 右下角的 **“属性”** (Properties) 窗口中，找到 **“复制本地” (Copy Local)** 属性。
4. 将其值设置为 **`False`**。

这样做是为了告诉 Visual Studio 在编译时不要将这些 Navisworks API DLL 复制到您的插件输出目录，因为 Navisworks 运行时已经提供了它们。

## 4. 配置生成输出路径 (重要步骤)

Navisworks 插件需要放置在特定的文件夹结构中才能被识别和加载 [3, 1]。

1. 在 **“解决方案资源管理器”** 中，右键点击您的项目（例如 `NavisworksLogisticsPlugin`）。
2. 选择 **“属性”** (Properties)。
3. 在项目属性页中，选择左侧的 **“生成”** (Build) 选项卡。
4. 在右侧的“输出”部分，找到 **“输出路径” (Output path)** 字段。
5. 您需要将此路径设置为 Navisworks 安装目录下的 `Plugins` 文件夹内的一个子文件夹，该子文件夹的名称必须与您的项目名称完全一致 [3, 1]。
    - **首先，手动在 Navisworks 安装目录中创建这个文件夹。** 例如，如果您的 Navisworks 2017 安装在 `C:\Program Files\Autodesk\Navisworks Manage 2017\`，并且您的项目名称是 `NavisworksLogisticsPlugin`，那么您需要创建以下文件夹：
        `C:\Program Files\Autodesk\Navisworks Manage 2017\Plugins\NavisworksLogisticsPlugin\`
    - **然后，将“输出路径”设置为这个新创建的文件夹的完整路径。** 例如：
        `C:\Program Files\Autodesk\Navisworks Manage 2017\Plugins\NavisworksLogisticsPlugin\` [1]

## 5. 开始编写插件代码

现在您的项目已经配置完毕，您可以开始编写插件代码了。您的插件类需要继承自 `Autodesk.Navisworks.Api.Plugins.AddInPlugin` 或 `Autodesk.Navisworks.Api.Plugins.DockPanePlugin`，并添加相应的 `PluginAttribute` 和 `AddInPluginAttribute` 或 `DockPanePluginAttribute` [3]。

例如，一个简单的“Hello World”插件骨架可能看起来像这样：

```csharp
using Autodesk.Navisworks.Api;
using Autodesk.Navisworks.Api.Plugins;
using System.Windows.Forms; // 用于MessageBox

namespace NavisworksLogisticsPlugin
{
   
    [AddInPlugin(AddInLocation.AddIn)] // 将插件显示在Navisworks的“附加模块”选项卡中
    public class Main : AddInPlugin
    {
        public override int Execute(params string parameters)
        {
            MessageBox.Show("Hello from Navisworks Logistics Plugin!");
            return 0;
        }
    }
}
```

**重要提示：**

- 将 `YOUR_DEVELOPER_ID` 替换为您自己的唯一开发者 ID。这通常是您的公司名称缩写或反向域名，以确保插件的唯一性。
- 编译项目后，Navisworks 启动时会自动加载位于其 `Plugins` 文件夹中的插件 [3, 1]。

通过遵循这些步骤，您应该能够成功地在 Visual Studio 2022 中为 Navisworks 2017 插件设置开发环境。

dotnet build TransportPlugin.csproj --configuration Debug --verbosity normal

dotnet build TransportPlugin.csproj --verbosity normal
