我正在尝试在.NET 4.0应用程序中使用POS for .NET库,但我遇到了一些问题。第一个是许多人似乎遇到的“CAS政策”例外。所以我已经将微软推荐的NetFx40_LegacySecurityPolicy = true条目添加到我的app.config文件中。
我现在看到的一个问题是,当我附加调试器并尝试构建一个新的PosExplorer时,构造函数挂起。如果调试器在我创建它时被分离,一切似乎都很好(我可以在这一点上重新连接,一切正常)。
是否有人知道可能导致此行为的原因,并希望我能做些什么来纠正它?
答案 0 :(得分:0)
我开始使用Reflector Pro调试PoS库,发现它已经陷入了这种方法:
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库时挂起。
应用此问题的修复:Managed DirectX running from .Net Framework 4.0 app dont hunt解决了问题。我们已经使用这个技巧将MDX与.NET 4一起使用但是我没有在这种情况下应用app.config设置,因为我正在编写一个独立的应用程序来熟悉PoS ...没想到我会尝试加载DirectX:)
答案 1 :(得分:0)
.NET Framework 4及更高版本并不总能与早期版本的框架兼容。在创建.NET 3.5程序集的实例时,常见的问题是.NET 4.0挂起。
要解决此问题,请将以下内容添加到您的app.config:
<startup useLegacyV2RuntimeActivationPolicy ="true" ><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>