首页 > 解决方案 > 是否可以从 WinForms VB.net 传递 Argumentlist?

问题描述

我可以在控制台应用程序中传递 Argumentlist,如下所示

Public Class test
  Public myProcess As ProcessStartInfo = New ProcessStartInfo

    Sub Main()
        With myProcess

            .FileName = <<some path>>
            For Each x As String In <<some list>>
                .Argumentlist.add(x)
            Next
            WorkingDirectory = args
            .UseShellExecute = False
        End With
    End Sub
End class

但是在 WinForms 项目中工作时,我无法访问 .argumentList 并且只能访问 .arguments :(

标签: vb.netcommand-line-arguments

解决方案


我可以在控制台应用程序中传递 Argumentlist,如下所示

我不这么认为。ArgumentList我能看到的任何地方都没有财产。当你使用 时Process.Start,你基本上只是复制了你在使用控制台窗口时会做的事情。如果您要在控制台窗口中启动这样的应用程序:

MyApp -a \b "C:\Some Folder\Some File.ext"

那么你基本上只是在代码中重现它。MyApp部分是FileName,其余的是Arguments

Dim psi As New ProcessStartInfo("MyApp", "-a \b ""C:\Some Folder\Some File.ext""")

如果您有一个参数列表,那么您只需将它们加入一个以空格分隔的单个String

Dim psi As New ProcessStartInfo("MyApp", String.Join(" ", myArgumentList))

编辑:

引用的ArgumentList属性仅在 .NET Core 中受支持,在 .NET Framework 中不支持。它在控制台应用程序项目中可用与具体的项目类型无关,而是与目标平台有关。如果您在控制台应用程序项目中以 .NET Framework 为目标,则该属性也将不可用,并且如果您在 Windows 窗体应用程序项目中以 .NET Core 为目标(您目前还不能在 VB 中执行此操作,尽管您可以使用 C#)那么该属性也将在那里可用。

您确实应该了解相对较新的 .NET Core 和从一开始就存在的 .NET Framework 之间的区别,并确保您在所有项目中都针对正确的选项。当 .NET 5.0 发布时,这将不再是一个问题。我不确定所有细节,但它们基本上是在该版本中合并 .NET Core 和 .NET Framework。

最后,我提供的解决方案是您在面向 .NET Framework 4.8 或更早版本时需要执行的操作,无论项目类型如何。


推荐阅读