C#编译调试问题汇总

Posted 不溯流光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#编译调试问题汇总相关的知识,希望对你有一定的参考价值。

一、调试问题

1、System.Reflection.TargetInvocationException 调用的目标发生了异常

这个错误是在没有加上try catch捕捉异常前,跳转到了Main()函数里报错。

加上异常捕获后,报System.Threading.ThreadAbortException:正在中止线程:
解决方案:https://www.cnblogs.com/imstrive/p/5631147.html
 

2、未加载mscorlib.pdb/System.Reflection.TargetParameterCountException 未经处理的异常在mscorlib.dll中发生/参数计数不匹配

delegate声明处的参数数量一定要与调用时传入的参数数量一致!
这个问题编译阶段不会出现编译错误,但运行时就报错了,一定要注意。

http://blog.sina.com.cn/s/blog_6b6bf63d0102y2r8.html


3、无法修改“xxx”的返回值,因为它不是变量

(1)C#:struct的陷阱:无法修改“xxx”的返回值,因为它不是变量

https://blog.csdn.net/u012169685/article/details/48317577?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

 
(2)无法修改"List.this[int]"的返回值,因为它不是变量

https://blog.csdn.net/Anfeng0228/article/details/80083522


4、当前上下文中不存在名称InitializeComponent

打开当前控件.Designer.cs文件,第一行的namespace名字是否与控件窗口名字一致


5、LC.exe”已退出,代码为 -1

在VS解决方案资源管理器里,把项目文件夹下Properties文件夹下的licenses.licx文件删除,重新编译。
https://jingyan.baidu.com/article/b24f6c822592b686bfe5daac.html


6、CLR无法从COM上下文 0x622b440转换为COM上下文 0x622b5b0

https://blog.csdn.net/zy19901021xy/article/details/84855231

 

 


7、未能写入输出文件“...\\obj\\Debug\\xxx.exe”--“另一个程序正在使用此文件,进程无法访问

如果是偶尔产生的,那么手动删除项目里的obj文件夹,再重新生成即可。

如果伴随警告 “xxx.cs”中的类型与“x.exe”中导入的类型“xxx”冲突。请使用“xxx.cs”中定义的类型,且项目中每个类都如此提示,那么应该是因为在“引用”中引用了项目本身,从引用中册除对所在项目的引用就可以了,同时可以解决错误和警告。


8、MSBuildToolsPath is not specified for the ToolsVersion解决办法

解决办法:32位的机器:在注册表中找到以下注册项:
    HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild,删掉以下东西
    HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\14.0                         
    HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\TOolsVersions\\14.0
    如果是64位的机器,还需要找到以下注册项:
    HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\MSBuild
    删掉以下东西
    HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\MSBuild\\14.0                                     HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\MSBuild\\ToolsVersions\\14.0
    重新启动IDE,就恢复正常了。


9、不安全代码只会在使用 /unsafe 编译的情况下出现

解决方案资源管理器,在项目上右键-->属性-->生成-->勾选 允许使用不安全的代码


10、属性不可作为 ref 或 out 参数传递

(1)为什么在C#中属性不可作为 ref 或 out 参数传递?

https://bbs.csdn.net/topics/350262475


(2)C#中使用ref 和 out 的一点认识

https://www.cnblogs.com/tangt/p/3914147.html

 

11、项目引用了 DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称

(1)在项目上点右键-->属性-->应用程序-->目标框架-->修改为.NET Framework 4。

而我原来的设置是.NET Framework 4 Client Profile。问题就出在这里。

以下是MSDN给出的提示:

If you are targeting the .NET Framework 4 Client Profile, you cannot reference an assembly that is not in the .NET Framework 4 Client Profile. Instead you must target the .NET Framework 4.

不过也因为如此,当在 Visual Studio 2010 建立新项目时,如果发现 [添加引用] 中没有列出原本应该列出的组件或者引用的其他程序集,在代码中的调用一直提示找不到名字空间时,可以先检查是否是项目的 target framework 设成了 .NET 4.0 Client Profile (例如 System.Web.dll 就不在 .NET 4.0 Client Profile 套件中),若是改成.NET Framework 4就OK了。

(2)检查Dll.net版本与当前项目是否一致,90%不一致。

https://www.cnblogs.com/xdot/p/6266735.html


二、编译器操作


1、打开.sln文件加载项目失败

点击确定后提示缺少.csproj文件。
重新生成解决方案:

 

 

2、VS2013设置类或函数前不显示引用的数量

找到菜单栏: 工具 ---> 选项  ---> 文本编辑器 ---> 所有语言 ---> CodeLens

设置取消启用CodeLens,并保存。


3、引用程序集带有黄色叹号

一般是版本不对应。操作:
https://blog.csdn.net/qq_41135605/article/details/83107886


4、VS3013如何查询该项目是什么样工程类型

解决方法:
在.vcproj文件中搜索Keyword。

MFC Application : MFCProj
MFC DLL: MFCDLLProj
Win32: Win32Proj

 

控制台程序:
用记事本打开.vcproj或.vcxproj文件,在里面查找subsystem。

 


5、VS2008 在文件中按 Ctrl + F 查找,不弹出查找框

选择窗口的重置窗口布局。(大概是弹出的窗口被别的挡住了)


6、工具箱被隐藏

ctrl+alt+x


7、窗体设计器双击打不开

首先把该窗体对应的.cs文件关闭,再双击窗体设计器即可。


8、代码行无法折叠及ctrl+鼠标左键无法跳转到定义的问题

都需要联机安装插件。

(1)代码行无法折叠
    在 Visual Studio 的菜单栏中,选择 “工具(T)”。
    然后选择 “拓展和更新(U)…” 选项卡。
    然后选择 “联机” 选项卡。
    再选择 “Visual Studio 库” 选项卡。
    排序依据保持默认 “最常用”即可, 在右侧搜索栏中搜索 “c# outline 2013” 插件。
    根据提示, 下载安装, 重启之后即可使用 “Ctrl + 鼠标左键” 实现快速查找函数变量类。

(2)ctrl+鼠标左键无法跳转到定义
    操作相同,搜索插件Go To Definition


9、扩展“C# outline 2013”需要的 .NET Framework 版本没有安装的问题

https://blog.csdn.net/wnk1997/article/details/111900945
补充一下,改完那个文件后,是直接双击CSharpOutline.vsix文件开始安装,而不是到VS里安装。


10、Visual Studio无法登录账号

(1)VS2015
提示Microsoft Edge浏览器版本过低。
工具 >> 选项 >> 环境 >> 账户 >> 使用以下方式添加账户并重新进行身份验证 >> 选择  系统Web浏览器。

 
(2)VS2017
提示脚本错误。我电脑浏览器一直用火狐,没有升级IE浏览器。
网上说在那个提示到期的弹框弹出来之前点击
帮助>>发送反馈>>报告问题
在弹出的界面上就可以登录。
但我这样操作直接跳转到了官方网页登录界面,并不是弹窗。
最终还是升级了下IE浏览器。

IE11下载安装

重启生效。


11、VS2013无法折叠所有方法

本来是 右键---大纲显示---折叠到定义,就可以折叠所有方法。
但不知道为什么突然失效。
只有快捷键 ctrl+m+o 可以折叠所有到namespace那层去了。
勉强实现,但还是麻烦(要从namespace展开再翻找)。

 
网上什么去工具箱设置的方法都解决不了。
直接到控制面板程序卸载里找到VS2013右键开始修复就能用,就是比较耗时,一个小时左右。

 

以上是关于C#编译调试问题汇总的主要内容,如果未能解决你的问题,请参考以下文章

Linux下的软件包管理器(yum),编译器(vim),编译器(gcc/g++),调试器(gdb)使用大汇总

调试Java代码(Eclipse)汇总

基于c语言中调试工具的用法汇总(不包含gdb)

HTTP协议调试工具汇总,你心目中应该是什么样的?

在 C# 中调试 c++ dll

从 C# Windows 应用程序编译 MFC 代码