Как получить OutputPath проекта в сборке Nuke - PullRequest
1 голос
/ 12 марта 2020

Я добавляю проект сборки Nuke в свое решение.

Мне нужно создать цель, которая копирует скомпилированные файлы в пользовательскую папку. Вы можете думать об этом как о типе развертывания.

Как получить выходную папку указанного проекта c?

Например, если проект называется «MyProject», и он находится в папке C:\git\test\MyProject, мне нужно получить путь вывода на основе текущей конфигурации и платформы, например C:\git\test\MyProject\bin\x64\Release.

Я пробовал этот, но он дает мне первое значение свойства OutputPath, а не значение для текущей конфигурации и платформы:

readonly Configuration Configuration = Configuration.Release;
readonly MSBuildTargetPlatform Platform = MSBuildTargetPlatform.x64;

// ...

Target LocalDeploy => _ => _
    .DependsOn(Compile)
    .Executes(() =>
    {
        var myProject = Solution.GetProject("MyProject");
        var outputPath = myProject.GetProperty("OutputPath"); // this returns bin\Debug
        var fullOutputPath = myProject.Directory / outputPath;
        CopyDirectoryRecursively(fullOutputPath, @"C:\DeployPath");
    });

Я также попробовал этот способ, который учитывает конфигурацию, но не платформу:

    var myProject = Solution.GetProject("MyProject");
    var myMSBuildProject = visionTools3Project.GetMSBuildProject(Configuration);
    var outputPath = myProject.GetProperty("OutputPath"); // this returns bin\Release
    var fullOutputPath = myProject.Directory / outputPath;
    CopyDirectoryRecursively(fullOutputPath, @"C:\DeployPath");

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Это обходной путь, который я наконец-то использовал.

readonly Configuration Configuration;
readonly MSBuildTargetPlatform Platform;

//...

Target Example => _ => _
    .DependsOn(Compile)
    .Executes(() =>
    {
        var project = Solution.GetProject("MyProject");
        var outputPath = GetOutputPath(project);
        // ...
    });

private AbsolutePath GetOutputPath(Project project)
{
    var relativeOutputPath = (RelativePath)"bin";

    if (Platform == MSBuildTargetPlatform.x64)
    {
        relativeOutputPath = relativeOutputPath / "x64";
    }

    relativeOutputPath = relativeOutputPath / Configuration;

    return project.Directory / relativeOutputPath;
}

Это довольно жесткий код, и я не принимаю во внимание путь вывода по умолчанию в нестандартных проектах. Надеюсь, это может быть полезно в качестве отправной точки для тех, кто пытается решить ту же проблему.

0 голосов
/ 13 апреля 2020

Простой способ сделать это - создать путь к вашей выходной папке следующим образом:

AbsolutePath OutputDirectory = RootDirectory / "MyProjectFolder" / "bin" / Configuration / "netstandard2.0";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...