相关疑难解决方法(0)

C#if/then指令用于debug和release

在解决方案属性中,我将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)

我的目标是根据调试版本和发布模式为变量设置不同的默认值.

c# debugging release compiler-directives

401
推荐指数
12
解决办法
32万
查看次数

在发布模式下显示Stack Trace for .NET程序集中的行号

有没有办法在发布模式下显示.NET程序集构建/部署的堆栈跟踪中的行?

更新:

我的应用程序分为三个类库项目和一个ASP.NET"网站"项目.我试图追踪的错误是在三个类库项目之一.我只为生成"未设置为对象实例的对象引用"错误的类库项目部署了pdb文件.

行号仍未显示在堆栈跟踪中.我是否需要为所有项目部署pdb文件以获取堆栈跟踪中的行号?

工作方案

为每个应用程序部署pdb文件修复了行号问题.

.net c# stack-trace line-numbers visual-studio

136
推荐指数
5
解决办法
8万
查看次数

如何获取当前行号?

这是我想要做的一个例子:

 MessageBox.Show("Error line number "+CurrentLineNumber);
Run Code Online (Sandbox Code Playgroud)

当前行号将是此段代码的源代码中的行号.

我怎样才能做到这一点?

c# wpf line-numbers c#-4.0

110
推荐指数
4
解决办法
6万
查看次数

如何获取源文件名和类型成员的行号?

考虑到调试数据文件可用(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确实能够获取该信息,但仅限于当前执行调用堆栈的范围.这意味着必须首先调用该方法.我想获得相同的信息,但不调用类型成员.

c# reflection

18
推荐指数
2
解决办法
1万
查看次数

如何获取当前工作的cs文件的文件名和当前类的名称

假设我正在使用Welcome.cs文件.在构造函数中,我想打印"欢迎".但是,如果我在HelloWorld.cs中放入相同的代码,它应该打印HellowWorld.我怎么做?

c#

8
推荐指数
4
解决办法
1万
查看次数

如何包含行号和文件名Console.WriteLine输出?

有没有办法在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# visual-studio

3
推荐指数
1
解决办法
3171
查看次数

log4net 写 '?' 当我使用 `%type、%method 和 %line` 模式时

我正在尝试在我的 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)

知道为什么会发生这种情况以及如何解决这个问题吗?我看到了一些使用这些模式的教程,并试图从中复制,但结果是一样的......也许我的配置有问题?

这里我知道我可以将文件名和行添加到我的消息中,但我想先在配置文件中尝试修复。

谢谢。

asp.net log4net

3
推荐指数
1
解决办法
681
查看次数