我读了所有类似的问题,没有找到答案.

 docker run -it --rm \
        -v /home/source3/mySolution:/myProj \
        nosinovacao/dotnet-sonar:latest \
        bash -c \
            "cd myProj  \
            && dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin \
            /k:testProj3 /name:testProj3 /version:1.0 \
            /d:sonar.host.url="http://192.168.1.98:9000" \
            /d:sonar.login="<myToken>" \
            && dotnet restore \
            && dotnet build -c Release \
            && dotnet /sonar-scanner/SonarScanner.MSBuild.dll end \
            /d:sonar.login="<myToken>""

这是Sonarcube scanner,它分析位于linux目录/home/source3/mySolution中的项目.

public void StartAnalysis(string projectName, string projectKey)
        {
            _logger.LogInformation($"{nameof(StartAnalysis)} called with params: {nameof(projectName)}: '{projectName}', {nameof(projectKey)}: '{projectKey}'");

            var command = @$"run -it --rm \
                          -v ""/home/source3/mySolution:/myProj"" \
                          nosinovacao/dotnet-sonar:latest \
                          bash -c \
                            ""cd myProj \
                            && dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin \
                            /k:{projectKey} /name:{projectName} /version:1.0 \
                            /d:sonar.host.url=""{_baseUrl}"" \
                            /d:sonar.login=""{_token}"" \
                            && dotnet restore \
                            && dotnet build -c Release \
                            && dotnet /sonar-scanner/SonarScanner.MSBuild.dll end \
                            /d:sonar.login=""{_token}""""";

            var processInfo = new ProcessStartInfo("docker", command)
            {
                CreateNoWindow = true,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true
            };

            int exitCode;
            using (var process = new Process())
            {
                process.StartInfo = processInfo;
                process.OutputDataReceived += ProcessOutputDataReceived;
                process.ErrorDataReceived += ProcessErrorDataReceived;

                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();
                process.WaitForExit(1200000);
                if (!process.HasExited)
                {
                    process.Kill();
                }

                exitCode = process.ExitCode;
                process.Close();
            }
        }

上述代码因"docker:引用格式无效"而失败.非常感谢您的帮助

推荐答案

反斜杠是用来告诉bash命令行还有更多的内容.从C#运行时,不需要这些.

按照这样做的方式,字符串还包括每行之间的CRLF.这些命令也必须执行,因此您最终只能使用一条长长的命令行.

就像这样

var command = 
    "run -it --rm " +
    "-v ""/home/source3/mySolution:/myProj"" " +
    "nosinovacao/dotnet-sonar:latest " +
    "bash -c " +
    """cd myProj " +
    "&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin " +
    $"/k:{projectKey} /name:{projectName} /version:1.0 " +
    $"/d:sonar.host.url=""{_baseUrl}"" " +
    $"/d:sonar.login=""{_token}"" " +
    "&& dotnet restore " +
    "&& dotnet build -c Release " +
    "&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll end " +
    "/d:sonar.login=""{_token}""""";

Csharp相关问答推荐

无法使用命令提示符创建空的dotnet核心Web应用程序

C#中的多yield 机制

在Microsoft XNA框架(MonoGame)中旋转相机

try 在Blazor项目中生成html

为什么将鼠标悬停在DateTimeOffset上只显示Hour值?

选取器与.NET Maui MVVM的绑定属性

只有第一个LINQ.Count()语句有效

如何在Windows 11任务调度程序中每1分钟重复一次任务?

ASP.NET Core AutoMapper:如何解决错误 CS0121调用在以下方法或属性之间不明确

如何使用NumberFormatInfo

如何向事件添加成员

依赖项注入、工厂方法和处置困境

HelperText属性不支持复杂内容(混合C#和标记)

GODOT 4向C#中的字符串参数发送信号以等待

Google OAuth令牌交换在.Net中不起作用

在同一个捕获中可以有多种类型的异常吗?

流畅的验证--如何为属性重用规则?

具有嵌套属性的IGGroup

在ObservableCollection上使用[NotifyPropertyChangedFor()]源代码生成器不会更新UI

无法使用直接URL通过PictureBox.ImageLocation加载图像