Visual Studio 如何在调试时使用参数启动程序?

xv8emn3q  于 2022-12-14  发布在  其他
关注(0)|答案(6)|浏览(711)

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

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);
}

我不想在编译的时候注解掉它,然后再重新注解进去。调试的时候怎么用参数启动程序呢?它被设置为启动项目。

vq8itlhq

vq8itlhq1#

转到Project-><Projectname> Properties。然后,单击Debug选项卡。然后:

如果您使用的是Visual Studio 2022

单击Open debug launch profiles UI继续。在标记为Command line arguments的文本框中填写参数。

如果您使用的是Visual Studio 2022之前的版本

Command Line Arguments文字方块位于[两柴]索引标签上。请在文字方块中填入参数。

vs91vp4v

vs91vp4v2#

我建议使用directives,如下所示:

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

            Console.WriteLine(args[0]);
        }

祝你好运!

qjp7pelc

qjp7pelc3#

我的建议是使用单元测试。
在您的应用程序中,在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);
        }
    }
}

这样,您就可以自动测试多个参数输入,而不必在每次要检查不同内容时编辑代码或更改菜单设置。

2sbarzqh

2sbarzqh4#

我来到这个页面是因为我的命令行参数中有敏感信息,我不想将它们存储在代码库中。我使用系统环境变量来保存这些值,这些值可以根据需要在每台构建或开发计算机上设置。环境变量扩展在Shell批处理进程中工作得很好,但在Visual Studio中不行。

  • Visual Studio启动选项:*

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

  • 问题示例:*

我在S.O.上尝试了几次之后的最终解决方案是在我的参数处理器中编写一个快速查找环境变量的程序。我在传入的变量值中添加了一个%检查,如果找到了,查找环境变量并替换该值。这在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调试中使用相同的语法。GIT中不保存帐户信息或URL。

  • 批量使用示例 *

jslywgbw

jslywgbw5#

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

或者右键单击左侧的项目〉属性〉调试选项卡
请参阅“应用程序参数:“

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

e0bqpujr

e0bqpujr6#

对于Visual Studio代码

  • 打开launch.json文件
  • 将参数添加到配置中:

“args”:[“某个参数”,“另一个”],

相关问题