【问题标题】:How do I add a 64-bit Visio Drawing control in VS 2012?如何在 VS 2012 中添加 64 位 Visio 绘图控件?
【发布时间】:2013-05-09 16:30:52
【问题描述】:

我们在应用程序中使用嵌入式 Visio 绘图控件作为自动可视化工具来表示系统层次结构。代码隐藏使用 Visio 互操作来创建和布置所有形状。带有嵌入式 Visio 文档的“设计器”部分是通过自定义控件完成的,该控件利用 WindowsFormsHost 控件中的 (ActiveX) Visio 绘图控件。

到目前为止,这种方法已经运行了好几年。我们首先在 VS2008/Visio 2007 中实现,然后迁移到 VS2010,然后是 Visio 2010。迁移到 VS2010/O2010 后,我们添加了另一个针对 x64 的构建。

为此,我必须重建 ActiveX 控件。由于 VS 设计器不支持 64 位版本的 Visio 绘图控件,您不能简单地创建一个 WindowsFormsHost 并将 Visio 绘图控件放到它上面; WPF 控件的构建方式必须与 32 位版本不同。我不记得确切我是怎么做到的,但我认为基本上是这样的(可能基于this):

  1. 在安装了 32 位 Visio 的构建环境中创建 WPF 表单
  2. 将 Visio 绘图控件从工具箱拖放到 WindowsFormsHost 内的窗体中。执行此步骤会导致 VS 创建(并添加引用)一个新的 DLL,即 AxMicrosoft.Office.Interop.VisOcx 类型的“Microsoft Visio 15.0 绘图控件类型库”。这个DLL放在项目下的/obj/Release目录下。
  3. 构建项目以创建用于最终 x86 解决方案构建的 WPF 控件 DLL
  4. 对于您的 32 位解决方案,复制并引用 {您的控件}.dll AxMicrosoft.Office.Interop.VisOcx.dll。
  5. 在安装了 64 位 Visio 的构建环境中保存、复制/移动和打开此控制项目
  6. 将构建目标更改为 x64
  7. 构建项目以创建用于最终 x64 解决方案构建的 WPF 控件 DLL
  8. 复制和引用 /bin/Release/{自定义控件}.dll 和 /obj/Release/AxMicrosoft.Office.Interop.VisOcx.dll。

我可以构建 32 位版本,但这不适用于 Visio 2013 64 位。任何线索如何完成这项工作?

【问题讨论】:

    标签: wpf visual-studio-2012 64-bit visio


    【解决方案1】:

    我终于找到了可以使用 64 位的解决方案。

    神奇的是我意识到我实际上并不需要 XAML 中的控件;所以我最终做的是从 XAML 页面中删除控件,并从 .xaml.cs 代码的构造函数中对其进行实例化。

    所以:按照this link 中的说明构建自定义控件。我认为您必须使用 64 位版本的 MSBuild.exe 进行构建,如 the link you provided 中所述。这显然仅在您创建自定义控件时才需要;我能够直接从 VS 构建解决方案(但它在由 MSBuild 构建时也可以正常工作,因此它也可以在自动构建中工作)。

    创建自定义控件

    1. 在安装了 32 位 Visio 的构建环境中创建一个名为 VisioAxControl 的新自定义控件项目
    2. 在 VS Designer 中,将 Visio 绘图控件从工具箱拖放到 WindowsFormsHost 内的窗体中。您可能需要将此控件添加到工具箱(右键单击工具箱,“选择项目...”)。执行此步骤会导致 VS 创建(并添加引用)一个新的 DLL,即 AxMicrosoft.Office.Interop.VisOcx 类型的“Microsoft Visio 15.0 绘图控件类型库”。这个DLL放在项目下的/obj/Release目录下,但是如果你简单地选择引用并将“Copy local”设置为“true”,就会在构建时复制到/bin。
    3. 打开代码隐藏并将控件的范围更改为public并重构:将其从axDrawingControl1重命名为AxVisioControl(最重要的是,不要忘记this.AxVisioControl.Name = "AxVisioControl";
    4. 构建项目以创建用于最终 x86/32 位解决方案构建的 WPF 控制 DLL
    5. 对于您的 x86/32 位解决方案,请将 VisioAxControl.dllAxMicrosoft.Office.Interop.VisOcx.dll 复制并引用到解决方案中某处的文件夹中。

      构建 64 位控件

    6. 在安装了 64 位 Visio 的构建环境中保存、复制/移动和打开自定义控件项目

    7. 将构建平台更改为 x64
    8. 打开管理员命令提示符,cd 到您的项目目录
    9. 运行MSBuild_Path\MSBuild.exe /p:Configuration=Release /p:Platform=x64 your_project_file_name(对我来说,MSBuild_Path是C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe)构建自定义控件项目来创建WPF控件DLL供最终x64使用解决方案构建

    包含在您的 64 位项目中

    1. 复制和引用/bin/Release/VisioAxControl.dll/obj/Release/AxMicrosoft.Office.Interop.VisOcx.dll
    2. 在表单的 XAML 中,添加 <WindowsFormsHost name="MyWindowsFormsHost"></WindowsFormsHost> 控件。
    3. 在 XAML 的代码隐藏中,在构造函数中:

      using VisioAxControl;
      public DesignView()
      {
          InitializeComponent();
          var avc = new VisioAxControl() { Name = "vControl" };
          this.MyWindowsFormsHost.Child = avc;
          this._avc = avc.AxVisioControl;  // for later reference, such as adding shapes
      }
      
    4. 保存并构建您的项目!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      相关资源
      最近更新 更多