Kas*_*sen 91 c# visual-studio-2008 visual-studio visual-studio-debugging
我想在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);
}
Run Code Online (Sandbox Code Playgroud)
我不想评论它,然后在编译时再回来.如何在调试时使用参数启动程序?它被设置为StartUp项目.
Øyv*_*hen 154
去吧Project-><Projectname> Properties.然后单击Debug选项卡,并在所调用的文本框中填写您的参数Command line arguments.
Hom*_*mam 49
我建议使用如下指令:
static void Main(string[] args)
{
#if DEBUG
args = new[] { "A" };
#endif
Console.WriteLine(args[0]);
}
Run Code Online (Sandbox Code Playgroud)
祝好运!
我来到此页面是因为我的命令行参数中有敏感信息,并且不希望将它们存储在代码存储库中。我使用系统环境变量来保存值,可以根据每个目的的需要在每个构建或开发计算机上设置这些值。环境变量扩展在 Shell Batch 进程中效果很好,但在 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("%", ""));
}
Run Code Online (Sandbox Code Playgroud)
这允许我在示例批处理文件以及使用 Visual Studio 进行调试时使用相同的语法。GIT 中没有保存任何帐户信息或 URL。
批量使用示例
我的建议是使用单元测试。
在您的应用程序中进行以下切换Program.cs:
#if DEBUG
public class Program
#else
class Program
#endif
Run Code Online (Sandbox Code Playgroud)
和相同static Main(string[] args)。
或者通过添加使用“ 朋友装配”
[assembly: InternalsVisibleTo("TestAssembly")]
Run Code Online (Sandbox Code Playgroud)
给你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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以自动地测试参数的多个输入,而不必每次都要检查其他内容时都无需编辑代码或更改菜单设置。
| 归档时间: |
|
| 查看次数: |
91664 次 |
| 最近记录: |