我开始有一些使用伪选择器的例外:首先。当我在visual studio上将目标框架从4更改为4.5.1时,就开始发生这种情况。之前运行相同的代码没有任何错误。使用CsQuery的所有其他功能似乎都能继续正常工作。
在我的项目引用上我有CsQuery.1.3.5.124,我想这可能是一个bug,不确定。它之前运作良好。
任何帮助?
感谢。
有
Stack trace:
[ArgumentException: The key already existed in the dictionary.]
System.Collections.Concurrent.ConcurrentDictionary`2.System.Collections.Generic.IDictionary<TKey,TValue>.Add(TKey key, TValue value) +10940468
CsQuery.Engine.PseudoSelectors.PopulateFromAssembly(Assembly assy, String[] nameSpaces) +344
CsQuery.Engine.PseudoSelectors.Register(Assembly assembly) +153
CsQuery.Engine.PseudoSelectors.PopulateInnerSelectors() +305
CsQuery.Engine.PseudoSelectors..ctor() +168
CsQuery.Engine.PseudoSelectors..cctor() +44
[TypeInitializationException: The type initializer for 'CsQuery.Engine.PseudoSelectors' threw an exception.]
CsQuery.Engine.PseudoSelectors.get_Items() +0
CsQuery.Engine.SelectorParser.AddPseudoSelector(String key) +49
CsQuery.Engine.SelectorParser.Parse(String selector) +2360
CsQuery.Engine.Selector..ctor(String selector) +103
CsQuery.CQ.Select(String selector) +83
CsQuery.CQ.get_Item(String selector) +42
答案 0 :(得分:1)
只有在项目中有自定义伪选择器,并且其中两个具有相同名称时,才会发生这种情况。如果你只是使用直接的CsQuery,那我就不会想到为什么会这样。
当CsQuery启动时,默认情况下,它将扫描调用程序集以查找实现IPseudoSelector
的类并尝试注册它。您可以使用此功能禁用自动扫描自定义伪选择器(在运行任何选择器之前):
CsQuery.Config.StartupOptions = 0;
如果您实际上使用自定义假选择器,您也可以手动注册它们,有关详细信息,请参阅此博客文章:
http://blog.outsharked.com/2012/07/csquery-113-released.html
我无法想出改变框架会导致这种情况发生的任何原因,所以也许这只是巧合,但希望这会为您提供解决问题所需的信息。
答案 1 :(得分:0)
是的,我实现了自定义伪选择器。这个问题现在似乎已经解决了。
问题发生在一个项目上,该项目引用了定义伪选择器的另一个项目。这两个项目都引用了CSQuery但不同的版本。我将旧版本(在定义伪选择器的项目中)替换为我在项目中出现问题的最新版本。
现在看来一切都还不错。
感谢您的帮助!!