加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 当发布dll不工作但调试dll的时候

发布时间:2020-12-13 20:13:01 所属栏目:Windows 来源:网络整理
导读:在将庞大的分布式系统部署到我们的客户之后,我们遇到了一个意想不到的错误.在调查期间,我们更换组件导致错误,我们添加了一些诊断代码.我们使用的dll内置在调试模式.突然一切都奏效! 使用发行版本(使用诊断代码)替换debug dll会使其再次崩溃. 在我们的代码中
在将庞大的分布式系统部署到我们的客户之后,我们遇到了一个意想不到的错误.在调查期间,我们更换组件导致错误,我们添加了一些诊断代码.我们使用的dll内置在调试模式.突然一切都奏效!

使用发行版本(使用诊断代码)替换debug dll会使其再次崩溃.

在我们的代码中没有预编译指令,条件调试属性等.这个问题已经在两个不同的安装地点被发现,而它的工作正常.

(该项目混合了C#和VB.NET,麻烦汇编是VB.NET ..,如果有任何区别)

所以问题是:在这样的情况下你做什么?一般可以是什么原因?任何关于调试此问题的建议是受欢迎的.

对于原因…好的,一些暗示的症状将有所帮助.一种可能性是你有一个方法,如Debug.WriteLine有副作用(即使它的工作).调用标有[条件(…)]的方法不会被编译,除非你有正确的符号定义 – 所以任何标记为[Conditional(“DEBUG”)]将被默认删除.

它也可能是一个编译器错误,但这不太可能(但不是不可能).

有什么症状?怎么破了

作为上述的一个例子:

static string Bar { get; set; }
    static void Main()
    {
        Bar = "I'm broken";
        Debug.WriteLine(Foo());
        Console.WriteLine(Bar);
    }
    // note Foo only called in DEBUG builds
    static string Foo()
    {
        Bar = "I'm working";
        return "mwahahah";
    }

编译在DEBUG模式下,它打印“我正在工作”;编译在RELEASE模式下,它打印“我坏了”.这听起来是否相似?检查你没有直接调用任何具有副作用的调试方法.在大多数情况下,您可以通过间接修复:

string foo = Foo();
Debug.WriteLine(foo);

现在它在任一模式下被调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读