从 .net 1.1 升级到 2.0过程中遇到的问题及解决方法
1.11-1.12日,将一个用vs2003编写的解决方案(windows form)升级到.net2.0。升级的过程比较顺利,基本没有出现编译错误(不过有一堆警告),但是运行的时候出了不少问题,以下节选其中比较典型的几个。
1. vs2005无法启动调试
1) 症状
vs2005启动调试失败,弹出错误提示:Error while trying to run project: Unable to start debugging. 绑定句柄无效。
2) 原因
Terminal Services 被禁用。
3) 解决办法
l 打开项目属性,在“Debug”一项里,把“Enable the Visual Studio hosting process”前的钩去掉。
l 打开计算机管理,在服务里将“Terminal Services”改成Manual,或者直接启动此服务。
2. 打开窗口时出错
1) 症状
打开窗体时,发生类型为 System.Resouces.MissingMainfestResourceException的异常。异常信息为:Could not find any resources appropriate for the specified culture or the neutralculture……
2) 原因
发生错误的语句为:
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
因此初步判断为在项目转换的时候 资源文件内容丢失
3) 解决办法
打开窗体设计器,重新设置应用程序的Icon。
3. 发生类型为ThreadStateException的异常
1) 症状
执行线称操作时发生类型为ThreadStateException的异常,异常信息为 The thread is dead.State can not be accessed。程序在fx1.1里编译运行不会出现此错误。
2) 原因
发生错误的语句段如下:
refreshThread = new Thread(new ThreadStart(BeginRefresh));
refreshThread.Start();
refreshThread.IsBackground = true; // -- 错误发生在这句
因此判断为在设置IsBackground属性时refreshThread已经完成了任务
3) 解决办法
修改语句的顺序为如下:
refreshThread = new Thread(new ThreadStart(BeginRefresh));
refreshThread.IsBackground = true;
refreshThread.Start();
4. 短消息客户端不能接收消息
1) 症状
客户端的TcpListener不能接收到WebService的Socket连接请求,也无法接收短消息。
2) 原因
经过调试发现,客户端登陆时,从服务器获得的客户端IP为127.0.0.1。经过检查后得知:由于vs 2005的配置文件使用方式改变,导致WebService引用没有能够通过动态的URL Behavier获取到正确的WebServices路径:http://ip/service.asmx,而是沿用了静态值:http://localhost/service.asmx,因此注册用户信息的时候,把用户的IP注册成了127.0.0.1,而这个IP是无法接受Socket连接的。这是一个很难发觉的问题,不过还是被我揪出来了,呵呵。
3) 解决办法
将配置文件调整为vs2005默认的方式。将各个组建的app.config 文件中生成的<applicationSettings>节和<section>的内容合并到主项目(exe文件所在的项目)的app.config中。
5. COM调用失败
1) 症状
调用COM时出现类型为System.IO.FileNotFoundException,异常信息为:Retrieving the COM class factory for compnent with CLSID {000209FF-…} failed due to the following error:8001007e
2) 原因
出错的代码为:
Word.Application wordApp = new Word.ApplicationClass();
但Word.dll已经存在于应用程序目录下。
造成这种情况的原因是注册表中的Ofiice COM 相关的项丢失或者被破坏。
3) 解决办法
重装Ofiice 2003
6. WordAddIn的工具栏不显示
1) 症状
升级以后在某些机器上安装客户端以后 WordAddIn的工具栏无法加载(不显示)。这种情况尤其喜欢出现在没有安装 vs 2005 的机器上。
2) 原因
DotNet2.0 跟1.1有某些变化,部分跟Office开发相关的dll默认不会复制到GAC里面。而WordAddIn需要调用这些dll,导致失败。而这些dll会在安装vs2005的时候拷贝到目标机器上。
3) 解决办法
在安装AddIn前,确保先安装 vstor(Microsoft visual studio 2005 tools for office 运行库 ),可以在网上找到这个vstor.exe文件,没有的人可以找我要。
7. 打包 .Net Framework 2.0到应用中
1) 方法
选中安装项目〉〉右键〉〉属性
弹出对话框
点击 Prerequisties 按钮,在组建选择框中选中 .Net Framework 2.0 ,并在下面的路径选项中选择 第二个:from the same location as my application。确认。
重新生成安装项目。