在解决方案属性中,我将Configuration设置为"release",用于我唯一的项目.
在主程序的开头,我有这个代码,它显示"Mode = Debug".我也在最顶端有这两行:
#define DEBUG
#define RELEASE
Run Code Online (Sandbox Code Playgroud)
我在测试正确的变量吗?
#if (DEBUG)
Console.WriteLine("Mode=Debug");
#elif (RELEASE)
Console.WriteLine("Mode=Release");
#endif
Run Code Online (Sandbox Code Playgroud)
我的目标是根据调试版本和发布模式为变量设置不同的默认值.
有没有办法在发布模式下显示.NET程序集构建/部署的堆栈跟踪中的行?
更新:
我的应用程序分为三个类库项目和一个ASP.NET"网站"项目.我试图追踪的错误是在三个类库项目之一.我只为生成"未设置为对象实例的对象引用"错误的类库项目部署了pdb文件.
行号仍未显示在堆栈跟踪中.我是否需要为所有项目部署pdb文件以获取堆栈跟踪中的行号?
工作方案
为每个应用程序部署pdb文件修复了行号问题.
这是我想要做的一个例子:
MessageBox.Show("Error line number "+CurrentLineNumber);
Run Code Online (Sandbox Code Playgroud)
当前行号将是此段代码的源代码中的行号.
我怎样才能做到这一点?
考虑到调试数据文件可用(PDB)并使用System.Reflection或其他类似框架(如Mono.Cecil),如何以编程方式检索源文件名和类型或类型成员的行号声明.
例如,假设您已将此文件编译为程序集:
C:\ MyProject的\ Foo.cs
1: public class Foo
2: {
3: public string SayHello()
4: {
5: return "Hello";
6: }
7: }
Run Code Online (Sandbox Code Playgroud)
怎么做这样的事情:
MethodInfo methodInfo = typeof(Foo).GetMethod("SayHello");
string sourceFileName = methodInfo.GetSourceFile(); // ?? Does not exist!
int sourceLineNumber = methodInfo.GetLineNumber(); // ?? Does not exist!
Run Code Online (Sandbox Code Playgroud)
sourceFileName将包含"C:\ MyProject\Foo.cs",sourceLineNumber将等于3.
更新:System.Diagnostics.StackFrame确实能够获取该信息,但仅限于当前执行调用堆栈的范围.这意味着必须首先调用该方法.我想获得相同的信息,但不调用类型成员.
假设我正在使用Welcome.cs文件.在构造函数中,我想打印"欢迎".但是,如果我在HelloWorld.cs中放入相同的代码,它应该打印HellowWorld.我怎么做?
有没有办法在C#的Console.WriteLine函数中包含行号和文件名?
例如,在文件"myClass.cs"的第115行,我有声明
Console.WriteLine("Hello world");
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
[myClass.cs][115]: Hello world
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 c# ASP.net Core 2.2 应用程序中使用 log4net,但是当我使用这些模式中的任何一个时,它们都会给我带问号的输出。
我的 log4net.config:
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="C:\Temp\app.log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date | %level | [%thread] | %type %method %line - %message%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
写入日志后文件如下所示:
2019-04-17 11:48:44,230 | INFO | [1] | ? ? ? - abc
Run Code Online (Sandbox Code Playgroud)
知道为什么会发生这种情况以及如何解决这个问题吗?我看到了一些使用这些模式的教程,并试图从中复制,但结果是一样的......也许我的配置有问题?
从这里我知道我可以将文件名和行添加到我的消息中,但我想先在配置文件中尝试修复。
谢谢。
c# ×6
line-numbers ×2
.net ×1
asp.net ×1
c#-4.0 ×1
debugging ×1
log4net ×1
reflection ×1
release ×1
stack-trace ×1
wpf ×1