我有一个我正在维护的程序,这是由我在这家公司取代的人编写的。
该软件的旧版本可在我们的所有部署平台上正常运行,但我试图推出的版本在32位桌面安装上运行良好,但在尝试时会崩溃并烧毁在64位计算机上访问Crystal Reports和Informix已安装的DLL,运行终端服务器会话(是的,我知道,我可以更改有关部署平台的更多信息吗?)
建议的调查途径之一是将解决方案平台从“任何CPU”更改为x86。
在尝试这样做时,Visual Studio似乎停止能够连接由XAML对象构造的部分类,对象声明它们没有“InitializeComponent”方法,然后在线路上失败直到达到最大值错误数量。
奇怪的是,更改解决方案平台,然后在Expression Blend中重建编译就好了。将平台更改回AnyCPU会使问题消失。所有项目都将编译和调试配置设置为“活动”。我没有看到任何理由为什么简单地更改目标平台会阻止XAML生成部分类(或者实际问题是什么......)
为什么会发生这种情况,我该如何解决?
编辑:好的,似乎项目中有一些外部DLL,那些那些是我称之为第一级编译失败的原因,因为它们不是一旦目标平台切换,似乎包含任何类。在VS2008中,这导致的级联故障完全没有任何工作,如上所述,但有一次我设法将项目导入VS2010,只有那些错误到位(缺失)类等),没有项目的其余部分爆炸。
我现在正在努力从这些DLL重构这些类,并希望能够将一个项目聚集在一起,该项目将在一天结束时在多个目标平台上进行编译。希望...
留下这个以防万一其他人遇到类似的问题,因为解决方案绝对不是很明显。
我仍然不确定为什么整个项目的其余部分在VS2008下崩溃,或者我做了什么导致
答案 0 :(得分:0)
建议的调查途径之一是将解决方案平台从“任何CPU”更改为x86。
如果直接或间接引用本机DLL,它们必须与加载过程的执行“位数”相匹配。
在32位系统上,您的应用程序将运行32位(当然)并加载32位版本的第三方库。
但在64位系统上是否存在 64位版本的Informix和Crystal Reports?
仅构建为x86,除非您将以64位进程运行(不太可能),它将保存测试所有内容两次。
PS。确保在更改平台设置时执行完全重建,因此首先删除任何现有的中间文件。
答案 1 :(得分:0)
复制上面的编辑,以便回答问题:
好吧,似乎项目中有一些外部DLL,这些是我称之为第一级编译失败的原因,因为它们似乎一旦没有包含任何类目标平台已经切换。
在VS2008中,这会导致级联失败,完全没有任何工作,如上所述,但有一次我设法将项目导入到VS2010,只有那些错误到位(缺少类等),没有该项目的其余部分爆炸。
我现在正在努力从这些DLL重构这些类,并希望能够将一个项目聚集在一起,该项目将在一天结束时在多个目标平台上进行编译。希望...
留下这个以防万一其他人遇到类似的问题,因为解决方案绝对不是很明显。
我仍然不确定为什么整个项目的其余部分在VS2008下崩溃,或者我做了什么导致