为什么更改解决方案平台会阻止部分类被看到?

时间:2010-11-18 11:13:46

标签: .net vb.net visual-studio visual-studio-2008 visual-studio-2010

我有一个我正在维护的程序,这是由我在这家公司取代的人编写的。

该软件的旧版本可在我们的所有部署平台上正常运行,但我试图推出的版本在32位桌面安装上运行良好,但在尝试时会崩溃并烧毁在64位计算机上访问Crystal Reports和Informix已安装的DLL,运行终端服务器会话(是的,我知道,我可以更改有关部署平台的更多信息吗?)

建议的调查途径之一是将解决方案平台从“任何CPU”更改为x86。

在尝试这样做时,Visual Studio似乎停止能够连接由XAML对象构造的部分类,对象声明它们没有“InitializeComponent”方法,然后在线路上失败直到达到最大值错误数量。

奇怪的是,更改解决方案平台,然后在Expression Blend中重建编译就好了。将平台更改回AnyCPU会使问题消失。所有项目都将编译和调试配置设置为“活动”。我没有看到任何理由为什么简单地更改目标平台会阻止XAML生成部分类(或者实际问题是什么......)

为什么会发生这种情况,我该如何解决?

编辑:好的,似乎项目中有一些外部DLL,那些那些是我称之为第一级编译失败的原因,因为它们不是一旦目标平台切换,似乎包含任何类。

在VS2008中,这导致的级联故障完全没有任何工作,如上所述,但有一次我设法将项目导入VS2010,只有那些错误到位(缺失)类等),没有项目的其余部分爆炸。

我现在正在努力从这些DLL重构这些类,并希望能够将一个项目聚集在一起,该项目将在一天结束时在多个目标平台上进行编译。希望...

留下这个以防万一其他人遇到类似的问题,因为解决方案绝对不是很明显。

我仍然不确定为什么整个项目的其余部分在VS2008下崩溃,或者我做了什么导致

2 个答案:

答案 0 :(得分:0)

  

建议的调查途径之一是将解决方案平台从“任何CPU”更改为x86。

如果直接或间接引用本机DLL,它们必须与加载过程的执行“位数”相匹配。

在32位系统上,您的应用程序将运行32位(当然)并加载32位版本的第三方库。

但在64位系统上是否存在 64位版本的Informix和Crystal Reports?

仅构建为x86,除非您将以64位进程运行(不太可能),它将保存测试所有内容两次。

PS。确保在更改平台设置时执行完全重建,因此首先删除任何现有的中间文件。

答案 1 :(得分:0)

复制上面的编辑,以便回答问题:

好吧,似乎项目中有一些外部DLL,这些是我称之为第一级编译失败的原因,因为它们似乎一旦没有包含任何类目标平台已经切换。

在VS2008中,这会导致级联失败,完全没有任何工作,如上所述,但有一次我设法将项目导入到VS2010,只有那些错误到位(缺少类等),没有该项目的其余部分爆炸。

我现在正在努力从这些DLL重构这些类,并希望能够将一个项目聚集在一起,该项目将在一天结束时在多个目标平台上进行编译。希望...

留下这个以防万一其他人遇到类似的问题,因为解决方案绝对不是很明显。

我仍然不确定为什么整个项目的其余部分在VS2008下崩溃,或者我做了什么导致