121

我想在 Visual Studio 2008 中调试一个程序。问题是如果它没有得到参数就会退出。这是来自主要方法:

if (args == null || args.Length != 2 || args[0].ToUpper().Trim() != "RM") 
{
    Console.WriteLine("RM must be executed by the RSM.");
    Console.WriteLine("Press any key to exit program...");
    Console.Read();
    Environment.Exit(-1);
}

我不想将其注释掉,然后在编译时重新添加。调试时如何使用参数启动程序?它被设置为启动项目。

4

6 回答 6

191

Project-><Projectname> Properties。然后单击Debug选项卡,并在名为Command line arguments.

于 2011-01-25T08:02:21.853 回答
58

我建议使用如下指令

        static void Main(string[] args)
        {
#if DEBUG
            args = new[] { "A" };
#endif

            Console.WriteLine(args[0]);
        }

祝你好运!

于 2011-01-25T08:10:27.300 回答
5

我的建议是使用单元测试。

在您的应用程序中执行以下切换Program.cs

#if DEBUG
    public class Program
#else
    class Program
#endif

和同样的static Main(string[] args)

或者通过添加使用Friend Assemblies

[assembly: InternalsVisibleTo("TestAssembly")]

到你的AssemblyInfo.cs.

然后创建一个单元测试项目和一个看起来有点像这样的测试:

[TestClass]
public class TestApplication
{
    [TestMethod]
    public void TestMyArgument()
    {
        using (var sw = new StringWriter())
        {
            Console.SetOut(sw); // this makes any Console.Writes etc go to sw

            Program.Main(new[] { "argument" });

            var result = sw.ToString();

            Assert.AreEqual("expected", result);
        }
    }
}

通过这种方式,您可以自动测试多个参数输入,而无需在每次要检查不同内容时编辑代码或更改菜单设置。

于 2013-12-19T16:04:02.487 回答
3

我来到这个页面是因为我的命令行参数中有敏感信息,并且不希望它们存储在代码存储库中。我使用系统环境变量来保存值,可以根据需要在每个构建或开发机器上为每个目的设置这些值。环境变量扩展在 Shell 批处理过程中效果很好,但不适用于 Visual Studio。

Visual Studio 启动选项:

Visual Studio 启动选项

但是,Visual Studio 不会返回变量值,而是变量的名称。

问题示例:

Visual Studio 中的错误示例

我在这里尝试了几个之后的最终解决方案是在我的参数处理器中快速查找环境变量。我在传入的变量值中添加了对 % 的检查,如果找到,则查找环境变量并替换该值。这适用于 Visual Studio 和我的构建环境。

foreach (string thisParameter in args)
            {
                if (thisParameter.Contains("="))
                {
                    string parameter = thisParameter.Substring(0, thisParameter.IndexOf("="));
                    string value = thisParameter.Substring(thisParameter.IndexOf("=") + 1);

                    if (value.Contains("%"))
                    {   //Workaround for VS not expanding variables in debug
                        value = Environment.GetEnvironmentVariable(value.Replace("%", ""));
                    }

这允许我在示例批处理文件中使用相同的语法,并使用 Visual Studio 进行调试。没有帐户信息或 URL 保存在 GIT 中。

批量使用示例

批处理文件示例

于 2020-01-18T13:55:24.710 回答
2

对于Visual Studio 代码

  • 打开launch.json文件
  • 将 args 添加到您的配置中:

"args": ["一些参数", "另一个"],

于 2019-02-10T10:57:07.673 回答
1

对于 .NET Core 控制台应用程序,您可以通过两种方式执行此操作 - 从 launchsettings.json 或属性菜单。

启动设置.json

在此处输入图像描述

或右键单击左侧的项目 > 属性 > 调试选项卡

请参阅“应用程序参数:”

  • 这是“”(空格)分隔的,不需要任何逗号。刚开始打字。每个空格“”代表一个新的输入参数。
  • (您在此处所做的任何更改都将反映在 launchsettings.json 文件中...)

在此处输入图像描述

于 2020-10-14T05:01:53.527 回答