调试时如何启动带参数的程序?

我想在 VisualStudio2008中调试一个程序。问题是如果没有参数,它就会退出。这来自于主要的方法:

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

I don't want to comment it out and and then back in when compiling. How can I start the program with arguments when debugging? It is set as the StartUp Project.

123415 次浏览

转到 Project-><Projectname> Properties,然后单击 Debug选项卡,在名为 Command line arguments的文本框中填写参数。

我建议像下面这样使用 指令:

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


Console.WriteLine(args[0]);
}

祝你好运!

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

在应用程序中,在 Program.cs中执行以下开关:

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

static Main(string[] args)也是如此。

或者通过添加

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

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

对于 VisualStudio 代码:

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

“ args”: [“一些争论”,“另一个”],

I came to this page because I have sensitive information in my command line parameters, and didn't want them stored in the code repository. I was using System Environment variables to hold the values, which could be set on each build or development machine as needed for each purpose. Environment Variable Expansion works great in Shell Batch processes, but not Visual Studio.

VisualStudio 开始选项:

Visual Studio Start Options

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

问题例子:

Example of Error in Visual Studio

在 S.o 上尝试了几个方法后,我的最终解决方案是在我的参数处理器中编写一个快速查找环境变量。我在传入的变量值中添加了% 检查,如果找到了,查找环境变量并替换该值。这可以在 VisualStudio 和我的生成环境中使用。

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("%", ""));
}

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

批量使用示例

Batch File Example

对于.NET Core 控制台应用程序,您可以通过两种方式实现这一点——从 launchsetings.json 或属性菜单。

启动 Json

enter image description here

或者右键单击左侧的 project > properties > debug 选项卡

see "Application Arguments:"

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

enter image description here