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

前端之家收集整理的这篇文章主要介绍了.net – 当发布dll不工作但调试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);

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

猜你在找的Windows相关文章