CsQuery伪选择异常

时间:2015-02-05 21:20:34

标签: csquery

我开始有一些使用伪选择器的例外:首先。当我在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

2 个答案:

答案 0 :(得分:1)

只有在项目中有自定义伪选择器,并且其中两个具有相同名称时,才会发生这种情况。如果你只是使用直接的CsQuery,那我就不会想到为什么会这样。

当CsQuery启动时,默认情况下,它将扫描调用程序集以查找实现IPseudoSelector的类并尝试注册它。您可以使用此功能禁用自动扫描自定义伪选择器(在运行任何选择器之前):

CsQuery.Config.StartupOptions = 0;

如果您实际上使用自定义假选择器,您也可以手动注册它们,有关详细信息,请参阅此博客文章:

http://blog.outsharked.com/2012/07/csquery-113-released.html

我无法想出改变框架会导致这种情况发生的任何原因,所以也许这只是巧合,但希望这会为您提供解决问题所需的信息。

答案 1 :(得分:0)

是的,我实现了自定义伪选择器。这个问题现在似乎已经解决了。

问题发生在一个项目上,该项目引用了定义伪选择器的另一个项目。这两个项目都引用了CSQuery但不同的版本。我将旧版本(在定义伪选择器的项目中)替换为我在项目中出现问题的最新版本。

现在看来一切都还不错。

感谢您的帮助!!