c#的结果是好的,当我调试,但我得到错误,当我启动.exe文件

本文关键字:错误 启动 exe 文件 调试 结果是 | 更新日期: 2023-09-27 18:16:24

我使用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在最后。它永远不会出现" thismethodnumbery "。

为什么?

这是我的记录器:

类日志记录器{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()

有人有主意吗?

c#的结果是好的,当我调试,但我得到错误,当我启动.exe文件

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

如果我的猜测是正确的-尝试在somePath中指定绝对路径。

确保string dllFile in dllFiles给出正确的dll &以您在代码中提到的字符串结束,并确保日志文件在结束时关闭。你一定会看到的

尽量使用IndexOf >=0而不是EndsWith("someString.dll"有时它很烦人2. 可能是在其他程序集中定义或移动的类型之一/查看msdn GetTypes中描述的异常

我应该用

Assembly assembly = Assembly.LoadFrom(dllFile);

代替

Assembly assembly = Assembly.LoadFile(dllFile);