0

我会发布我的代码,但我看不到重点,因为如果我在其中放置断点,它永远不会到达它,错误会在执行到达它之前触发。我最初认为它可能是 .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 },
}
4

6 回答 6

1

看起来您正在将一个项目添加到已经包含具有相同键的项目的集合中。键名必须是唯一的。

于 2012-12-17T13:31:43.643 回答
1

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

至少,消息很清楚:NDesk正在尝试将键添加到已经存在的字典中。如果这在您的代码中没有任何内容,则它必须是某种自动机制,例如读取文件并从中构建字典。

据我所知,NDesk应该可以帮助您解析命令行选项 - 问题可能是您两次传递相同的参数?

于 2012-12-17T13:39:51.773 回答
0

例外是非常不言自明的。您正在尝试添加一个已经存在的密钥。Visual Studio 可能会突出显示发生这种情况的行。

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

于 2012-12-17T13:32:28.010 回答
0

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

于 2012-12-17T13:32:31.363 回答
0

An item with the same key has already been added.

我认为这正是它听起来的样子。您正在填充字典并两次添加相同的键。

于 2012-12-17T13:33:22.867 回答
0

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

于 2012-12-17T13:35:42.547 回答