当前位置:  开发笔记 > 编程语言 > 正文

当发布dll不起作用但调试dll没有

如何解决《当发布dll不起作用但调试dll没有》经验,为你挑选了2个好方法。

在将我们庞大的分布式系统部署到我们的客户之后,我们遇到了意外错误.在调查期间,我们将导致错误的组件替换为我们添加了一些诊断代码的组件.我们使用的DLL是在调试模式下构建的.突然一切都行了!

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

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

(该项目混合了C#和VB.NET,麻烦组件是VB.NET ..,如果这有什么不同)

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



1> Marc Gravell..:

对于原因......好吧,一些症状的暗示会有所帮助.一种可能性是你有一个类似方法的代码Debug.WriteLine有副作用(即使其工作).[Conditional(...)]除非您定义了正确的符号,否则不会编译对标记为的方法的调用- 因此任何标记的内容[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);

现在它以任一模式调用.



2> JoshBerke..:

您可以尝试在Build Settings中关闭Optimize Code.你得到的实际错误是什么.

您可以做的另一件事是在发布模式下编译,但启用#Debug条件.如果你使用Diagnostics.Debug及其中的代码影响你的应用程序,这将处理这种情况.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有