C # результат в порядке, когда я отлаживаю, но я получаю ошибки, когда я запускаю .exe файл - PullRequest
0 голосов
/ 30 ноября 2011

Я работаю в 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» появляется несколько раз в файле журнала.

Когда я создаю исполняемый файл и запускаю его, регистратор выглядит так: ThisMethod numberX в конце. Это никогда не приходит к «ThisMethod numberY».

Почему это?

Вот мой регистратор:

Класс Logger { путь к частной статической строке = @ "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();
        }
    }
}

Edit: если dllFiles пуст, то все в порядке. Но если файлы есть, то проблема появляется.

Редактировать 2: Проблема в

Type type in assembly.GetTypes()

У кого-нибудь есть идея?

Ответы [ 4 ]

3 голосов
/ 30 ноября 2011

если "somePath" относительно каталога запуска, то ваш exe-файл может сканировать другой каталог => не найден .dll-файлы => «ThisMethod numberY» не вызывается.

Если мое предположение верно - попробуйтеуказание абсолютного пути в somePath.

2 голосов
/ 30 ноября 2011

Убедитесь, что string dllFile in dllFiles дает правильный адрес dll и заканчивается строкой, которую вы упомянули в коде, и убедитесь, что файл журнала закрыт в конце.Вы обязательно увидите это.

0 голосов
/ 30 ноября 2011

Я должен был использовать

Assembly assembly = Assembly.LoadFrom(dllFile);

вместо

Assembly assembly = Assembly.LoadFile(dllFile);
0 голосов
/ 30 ноября 2011

Попробуйте использовать IndexOf >=0, а не EndsWith("someString.dll", иногда это глючит. 2. Может быть один из типов, определенных или перемещенных в другой сборке. Посмотрите на msdn GetTypes, где описано исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...