Microsoft POS для .NET и .NET 4.0 зависает при отладке - PullRequest
0 голосов
/ 26 апреля 2011

Я пытаюсь использовать библиотеку POS для .NET в приложении .NET 4.0, и у меня возникают некоторые проблемы.Первым было исключение «политики CAS», с которым, похоже, сталкивается много людей.Поэтому я добавил запись NetFx40_LegacySecurityPolicy = true в мой файл app.config, как рекомендует Microsoft.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда у меня подключен отладчик и я пытаюсь создать новый PosExplorer, конструктор зависает.Если отладчик отсоединен, когда я его создал, все, кажется, в порядке (и я могу повторно подключиться в этот момент, и все работает).

Кто-нибудь имеет представление о том, что может быть причиной такого поведения, и, надеюсь, что я мог бы сделать, чтобы исправить это?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2013

.NET Framework 4 и выше не всегда хорошо работает с более ранними версиями фреймворка.Распространенной проблемой является зависание .NET 4.0 при создании экземпляра сборки .NET 3.5.

Чтобы устранить эту проблему, добавьте в свой app.config следующее:

<startup useLegacyV2RuntimeActivationPolicy ="true" ><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
0 голосов
/ 27 апреля 2011

Я начал отладку в библиотеке PoS с помощью Reflector Pro и обнаружил, что он застревает в этом методе:

private static ServiceObjectCollection ScanFolder(string path, Dictionary<string, string> posAssemblies)
{
  Logger.Info("AssemblyLoader", "Scanning folder " + path + " for SO assemblies.");
  ServiceObjectCollection serviceobjects = new ServiceObjectCollection();
  DirectoryInfo info = new DirectoryInfo(path);
  Logger.Info("AssemblyLoader", "Enumerating files in " + path);
  foreach (FileInfo info2 in info.GetFiles())
  {
    LoadFile(info2, posAssemblies, serviceobjects);
  }
  Logger.Info("AssemblyLoader", "Leaving ScanFolder.");
  return serviceobjects;
}

Где он пытается загрузить каждую сборку в рабочем каталоге для поиска объектов PoS... он зависал при попытке загрузить старую библиотеку Managed DirectX, которую также использует наше приложение.

Применение исправления из этого вопроса: Управляемый DirectX, запущенный из приложения .Net Framework 4.0, не охотится решил проблему.Мы уже использовали этот трюк для использования MDX с .NET 4, однако в этом случае у меня не было настройки app.config, потому что я писал отдельное приложение для знакомства с PoS ... не ожидал, что ябудет пытаться загрузить DirectX:)

...