0

我开始在使用伪选择器时遇到一些例外情况:first。当我在 Visual Studio 上将目标框架从 4 更改为 4.5.1 时,这种情况开始发生。之前运行相同的代码没有任何错误。CsQuery 的其他一切似乎都可以正常工作。

在我的项目引用中,我有 CsQuery.1.3.5.124,我想这可能是一个错误,不确定。它以前工作得很好。

有什么帮助吗?

谢谢。

那里

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
4

2 回答 2

1

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

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

CsQuery.Config.StartupOptions = 0;

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

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

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

于 2015-02-06T18:26:24.413 回答
0

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

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

现在看来一切都恢复正常了。

谢谢你的帮助!!

于 2015-03-11T04:20:10.040 回答