执行错误而没有到达我的代码

时间:2012-12-17 13:27:58

标签: c# .net

我会发布我的代码,但我没有看到这一点,因为如果我在其中放置一个断点,它永远不会到达它,错误会在执行到达之前触发。我最初认为它可能是.config文件中的副本,但我没有看到任何。代码编译正确。

感谢。

这是我得到的错误:

Unhandled Exception: System.ArgumentException: An item with the same key has alr
eady been added.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boo
lean add)
   at System.Collections.ObjectModel.KeyedCollection`2.AddKey(TKey key, TItem it
em)
   at System.Collections.ObjectModel.KeyedCollection`2.InsertItem(Int32 index, T
Item item)
   at NDesk.Options.OptionSet.InsertItem(Int32 index, Option item)
   at System.Collections.ObjectModel.Collection`1.Add(T item)
   at NDesk.Options.OptionSet.Add(String prototype, String description, Action`1
 action)
   at manifest_mass_deployment.Program.Main(String[] args)

编辑:错误与NDESK有关,我使用了相同的变量两次:

var p = new OptionSet(){
  { "t|time=", "start time", v=> starttime = v },
  { "s|span=", "span time", v=> spantime = v },
  { "t|thread=", "Fhreads to fork", v=> threads = v },
}

6 个答案:

答案 0 :(得分:1)

看起来您要将项目添加到已包含具有相同键的项目的集合中。 Keynames必须是独一无二的。

答案 1 :(得分:1)

问题出现在NDesk。如果这是C#找到的基于回调的程序选项解析器here,那么在代码运行之前它可能会执行某些操作吗?也许它试图解析命令行选项?

至少,消息很明确:NDesk正在尝试将密钥添加到已存在的字典中。如果您的代码中没有任何内容,那么它必须是一些自动机制,例如读取文件并从中构建字典。

从我看到,NDesk应该可以帮助你解析命令行选项 - 问题可能是你传递了两次相同的参数?

答案 2 :(得分:0)

异常是非常自我解释的。您正在尝试添加已存在的密钥。 Visual Studio可能会突出显示发生这种情况的行。

如果不是,那么您可以尝试更改可能导致问题的配置,或者从应用程序运行代码开始调试。

答案 3 :(得分:0)

似乎问题是程序的重复启动参数。检查Project Properties -> Debug -> Command Line Arguments

答案 4 :(得分:0)

An item with the same key has already been added.

我认为这听起来完全一样。您正在填充字典并添加相同的密钥两次。

答案 5 :(得分:0)

我见过一种情况,因为Visual Studio已经过度兴奋并且开始缓存一个不应该被忽略的文件,所以没有出现断点。您可以尝试确保在重建之前清理解决方案。如果这不起作用,请尝试删除[BootDir]:\Users\[UserName]\AppData\Local\Temp的内容,如果您正在使用Asp.Net解决方案[BootDir]:\Windows\Microsoft.NET\Framework\v[FrameworkVersion]\Temporary ASP.NET Files - 那些应该清除Visual Studio为自己保存的任何文件。