我在一个解决方案中有两个项目:
MyWinForm
- 具有自定义用户控件的 32 位项目
MyClassLibrary
- 一个 64 位项目,需要 64 位进行数学运算
我被微软"强迫"生成 32 位程序集的用户控件。请参阅此处以供参考
我的数学模型"强迫"我需要 64 位数学运算。
如果我在MyWinForm
中引用MyClassLibrary
并将其维护为 64 位程序集,则我的数学运算将成功完成;但是,我不能再使用自定义用户控件。如果我尝试将自定义用户控件拖放到设计器图面,则会出现以下错误:"无法加载工具箱项,它将被删除"。
如果我在 MyWinForm
中引用MyClassLibrary
并将其维护为 32 位程序集,则我的数学运算将失败并出现 OutOfMemory 异常(由于 32 位最大大小限制)。
如何设置我的解决方案以允许引用自定义用户控件和 64 位类库,从而避免这些问题?
我真的很希望能够使用工具箱和设计图面。我有一种预感,我需要在运行时加载自定义用户控件,以便动态编译器知道如何决定 32 位或 64 位。在我看来,这违背了使用可视化IDE的目的。
解决方案是一种解决方法。我意识到我的目标是使用以 32 位运行的可视化设计器,这样我就不必编写任何自己的代码。这是我所做的:
- 将
WinForms
项目设置为 32 位。 - 创建了一个
custom user control
。 - 以 32 位生成项目。
- 将
custom user control
拖放到设计图面上。 - 指定
custom user control
的所有属性。(颜色、尺寸、停靠栏等) - 声明
Form_OnLoad()
方法。 - 将与我的自定义用户控件相关的设计器代码隐藏中的所有自动生成的代码复制/粘贴到
Form_OnLoad()
中。 - 从设计图面中删除与
custom user control
相关的所有设计元素。这将删除custom user control
设计器代码隐藏中自动生成的代码。 - 构建和测试:我看到
custom user control
吗? 是的..进行。 - 将 WinForms 项目的生成设置切换回 64 位。
- 构建和测试:我看到
custom user control
了吗? 是的..执行数学函数...它没有任何例外地工作吗?是的。。进行
这种快速而肮脏的解决方法并不理想 - 但实施速度非常快。将我的项目暂时切换为 32 位以激活可视化 IDE,对于这个项目来说"没什么大不了的"。
编辑到解决方案 ****
不要执行上述操作。相反,请参阅下面的汉斯评论。
管理员:很抱歉帖子草率,请随时删除它,因为我不知道这个问题和答案是否会帮助除了我之外的其他人。