控制台应用程序在将值设置为变量并替换它时停止调试

本文关键字:替换 调试 变量 应用程序 设置 控制台 | 更新日期: 2023-09-27 18:33:14

我已经开始构建一个简单的控制台应用程序,但遇到了一些奇怪的行为。 我已经将问题隔离到下面的代码中。 由于某种原因,当执行 s.replace 行时,我立即在输出中看到以下内容:"'appname.vshost.exe'(托管(:加载了'C:''Windows''assembly''GAC_MSIL''System.Configuration''2.0.0.0__b03f5f7f11d50a3a''System.Configuration.dll'",然后"程序'[17680] appname.vshost.exe:托管'已退出,代码为 -2147023895 (0x800703e9(。

调试已停止。 arg for path 中的值是文件所在的完整 UNC 路径。 我想剥离路径=并使用路径值。 我是否跳过了某处的某些内容,而 VS 没有给我例外? 我使用VS 2008和2010都存在相同的问题。 这是因为 s 是参数吗?

            foreach (string s in args)
            {
                if ((s != "") && (s.ToString().ToLower().Contains("path=")))
                {
                    string a = @"''computer'dir'";                            
                    a.Replace("path=", "");
                }
            }

这可能是一个视觉工作室问题,因为它似乎发生在我分配值的任何字符串上。 我只是在下面添加了删除替换并得到了相同的响应:

string a = @"value";

路径示例为 ''计算机''目录 1''目录 2''

我已经根据建议更新了代码,但上述仍然存在相同的问题。 替换代码行失败。

控制台应用程序在将值设置为变量并替换它时停止调试

我不知道

这是否是错误的源头,但string.Replace返回一个新字符串 - 它不会修改底层字符串。 另外,在检查字符串是否包含特定子字符串后,您将检查空值。如果要更新集合中的字符串,正确的循环是:

for(int i=0; i < args.Length; args++)
{
    s = args[i];
    if (s != null && s.ToLower().Contains("path="))
         args[i] = s.Replace("path=", "");
    else
         throw new Exception("Missing file path in command line");
}