我调试时C#结果很好,但是当我启动.exe文件时出现错误

时间:2011-11-30 08:43:55

标签: c# debugging logging

我在C#,。Net 2.0工作。

当我调试我的代码时,一切正常。但是,当我创建exe时,它不是。我添加了一个记录器。这是我的一段代码:

string[] dllFiles = System.IO.Directory.GetFiles(getAddinDllPath(), "Begin_*.dll");
foreach (string dllFile in dllFiles)
{
    Logger.Info("ThisMethod numberX");
    if (!dllFile.EndsWith("someString.dll", StringComparison.InvariantCultureIgnoreCase))
    {
        Assembly assembly = Assembly.LoadFile(dllFile);

        foreach (Type type in assembly.GetTypes())
        {
            Logger.Info("ThisMethod  numberY");
         ...............

getAddinDllPath()方法返回:

addinDllPath = Path.Combine(Path.Combine(myDocuments, "Visual Studio 2005"), "Addins") + "\\";

当我调试程序时,文本'ThisMethod number Y'在日志文件中多次出现。

当我创建exe并运行它时,记录器看起来像这样:ThisMethod numberX在结尾处。它永远不会出现在“ThisMethod numberY”中。

为什么?

这是我的记录器:

类记录器     {         private static string path = @“C:\ Users \ John \ Documents \ Projects \ MyLogger.txt”;

    public static string Path
    {
        get { return path; }
        set { path = value; }
    }

    public static void Info(string msg)
    {
        StreamWriter sw = File.AppendText(path);
        try
        {
            string logLine = System.String.Format(
                "{0:G}: {1}: {2}", System.DateTime.Now, @"INFO", msg);
            sw.WriteLine(logLine);
        }
        finally
        {
            sw.Close();
        }
    }
}

编辑: 如果dllFiles为空,那么一切都很好。但如果文件存在,则会出现问题。

编辑2: 问题在于

Type type in assembly.GetTypes()

有人有想法吗?

4 个答案:

答案 0 :(得分:3)

如果"somePath"与运行目录相关,则您的exe可能正在扫描另一个目录=>找不到.dll文件=> “ThisMethod numberY”未被调用。

如果我的猜测属实,请尝试在somePath中指定绝对路径。

答案 1 :(得分:2)

确保string dllFile in dllFiles提供dll&的正确地址。以您在代码中提到的字符串结尾,并确保日志文件在结尾处关闭。你肯定会看到它。

答案 2 :(得分:0)

尝试使用IndexOf >=0而不是EndsWith("someString.dll" 有时它会烦恼 2.可以是在其他程序集中定义或移动的类型之一/查看msdn GetTypes,其中描述了异常

答案 3 :(得分:0)

我应该用

Assembly assembly = Assembly.LoadFrom(dllFile);

而不是

Assembly assembly = Assembly.LoadFile(dllFile);