我们在应用程序中使用嵌入式Visio绘图控件作为自动可视化工具来表示系统层次结构。代码隐藏使用Visio互操作来创建和布局所有形状。带有嵌入式Visio文档的“设计器”部分是通过在WindowsFormsHost控件中使用(ActiveX)Visio绘图控件的自定义控件完成的。
到目前为止,这种方法已经运作了好几年。我们首先在VS2008 / Visio 2007中实现,然后迁移到VS2010,然后迁移到Visio 2010.一旦我们迁移到VS2010 / O2010,我们添加了另一个针对x64的构建。
为此,我不得不重建ActiveX控件。由于VS设计器不支持64位版本的Visio Drawing控件,因此您不能简单地创建一个WindowsFormsHost并将Visio Drawing控件放到其上;必须以与32位版本不同的方式构建WPF控件。我不记得完全我是怎么做到的,但我认为基本上是这样的(可能基于this):
我可以为32位版本构建,但这不适用于64位Visio 2013。有任何线索如何完成这项工作?
答案 0 :(得分:1)
我终于让我们的解决方案使用64位工作。
神奇的是我意识到我实际上并不需要XAML中的控件;所以我最终做的是从XAML页面中删除控件,并从.xaml.cs代码的构造函数中实例化它。
所以:按照this link中的说明构建自定义控件。我认为你必须使用64位版本的MSBuild.exe进行构建,如the link you provided中所述。显然只有在创建自定义控件时才需要这样做;我能够直接从VS构建解决方案(但它也可以在MSBuild构建时正常工作,因此它也适用于自动构建)。
public
并重构:将其从axDrawingControl1
重命名为AxVisioControl
(最重要的是,不要忘记{{} 1}})对于x86 / 32位解决方案,请复制&将this.AxVisioControl.Name = "AxVisioControl";
和VisioAxControl.dll
引用到解决方案中的某个文件夹中。
在安装了64位Visio的构建环境中保存,复制/移动和打开自定义控件项目
AxMicrosoft.Office.Interop.VisOcx.dll
(对我来说,MSBuild_Path是C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ MSBuild.exe)来构建自定义控件项目以创建WPF控件DLL以供在最终的x64解决方案构建MSBuild_Path\MSBuild.exe /p:Configuration=Release /p:Platform=x64 your_project_file_name
和/bin/Release/VisioAxControl.dll
。/obj/Release/AxMicrosoft.Office.Interop.VisOcx.dll
控件。在XAML的代码隐藏中,在构造函数中:
<WindowsFormsHost name="MyWindowsFormsHost"></WindowsFormsHost>