如何使用msBuild在nuke build中发布解决方案

如何使用msBuild在nuke build中发布解决方案,msbuild,publish,nuke-build,Msbuild,Publish,Nuke Build,这可能是个蹩脚的问题,也许我遗漏了一些非常明显的东西。但我现在试图解决这一问题几天都没有成功 我有一个很大的解决方案(31个项目)使用.NET框架。我们过去用于构建和部署流程,但现在我必须将该流程移动到。 我使用的是MSBuild,不是DotNet 我成功地将任务(从蛋糕)转换为目标(核武器),并修复了不同目标之间的依赖关系。解决方案构建 但我找不到在MSBuild上使用目标“Publish”的简单方法,也不知道如何设置发布目录 例如,CAKE中的一项任务如下所示: Task("Bui

这可能是个蹩脚的问题,也许我遗漏了一些非常明显的东西。但我现在试图解决这一问题几天都没有成功

我有一个很大的解决方案(31个项目)使用.NET框架。我们过去用于构建和部署流程,但现在我必须将该流程移动到。 我使用的是MSBuild,不是DotNet

我成功地将任务(从蛋糕)转换为目标(核武器),并修复了不同目标之间的依赖关系。解决方案构建

但我找不到在MSBuild上使用目标“Publish”的简单方法,也不知道如何设置发布目录

例如,CAKE中的一项任务如下所示:

Task("BuildService")
    .Does(() => {
    var csprojFile = rootSolutionDirectory + "/Core/MyProject.Service/MyProject.Service.csproj";
    var publishDestination = $"{tempPublishDestination}/service";
    MSBuild(csprojFile, new MSBuildSettings()
        .WithProperty("target", "build;publish")
        .WithProperty("DeployOnBuild", "true")
        .WithProperty("PublishProfile", publishProfile)
        .WithProperty("Configuration", configuration)
        .WithProperty("Platform", platform)
        .WithProperty("PublishUrl", publishDestination)
    );
});
我把它转换成了核武器中的目标:

Target BuildService => _ => _
    .Executes(() =>
    {
            var csprojFile = rootSolutionDirectory + "/Core/MyProject.Service/MyProject.Service.csproj";
            var publishDestination = $"{tempPublishDestination}/service";
            MSBuild(s => s
                .SetTargetPath(csprojFile)
                .SetTargets("Rebuild", "Publish") // looks like "Publish" does nothing
                .SetConfiguration(Configuration)
                .SetAssemblyVersion(GitVersion.AssemblySemVer)
                .SetFileVersion(GitVersion.AssemblySemFileVer)
                .SetInformationalVersion(GitVersion.InformationalVersion)
                .SetMaxCpuCount(Environment.ProcessorCount)
                .SetNodeReuse(IsLocalBuild))
                // don't know where to put publishDestination
                ;             
    });
我在这里被绊住了。我不知道如何让MSBuild也通过Nuke.Common.Tools.MSBuild.MSBuildSettings或其他对象进行“发布”

还有,如何告诉MSBuild应该在哪里发布它


马丁,我将非常感谢您的回答,并向您致以最诚挚的问候。

多亏了马蒂亚斯,我才解决了这个问题(见对问题的评论)

如果其他人有类似的问题,我的解决方案如下:

    Target BuildService => _ => _
    .Executes(() =>
    {
        var csprojFile = RootDirectory + @"\Core\MyProject.Service\MyProject.Service.csproj";
        var publishDestination = $@"{TempPublishDestination}\service";

        MSBuildTasks.MSBuild(s => s
            .SetTargetPath(csprojFile)   
            .SetConfiguration(Configuration)
            .SetMaxCpuCount(Environment.ProcessorCount)
            .SetNodeReuse(IsLocalBuild)
            .SetProperty("DeployOnBuild", "true")
            .SetProperty("PublishProfile", Configuration.ToString())
            .SetProperty("Platform", "AnyCPU")
            .SetProperty("PublishUrl", publishDestination)
            .SetTargets("Build", "Publish")
            );
    });

如果您想避免发布配置文件,请多谢

MSBuild(s => s
    .SetTargetPath(<cs proj directory>)   
    .SetConfiguration(Configuration)
    .SetMaxCpuCount(Environment.ProcessorCount)
    .SetNodeReuse(IsLocalBuild)
    .SetProperty("DeployOnBuild", "true")
    .SetProperty("Platform", "AnyCPU")
    .SetProperty("PublishUrl", <a folder>)
    .SetProperty("DeployDefaultTarget", "WebPublish")
    .SetProperty("WebPublishMethod", "FileSystem")
    .SetTargets("Build", "Publish")
);
MSBuild(s=>s)
.SetTargetPath()
.SetConfiguration(配置)
.SetMaxCpuCount(环境.ProcessorCount)
.SetNodeReuse(IsLocalBuild)
.SetProperty(“DeployOnBuild”、“true”)
.SetProperty(“平台”、“任何CPU”)
.SetProperty(“PublishUrl”,)
.SetProperty(“DeployDefaultTarget”、“WebPublish”)
.SetProperty(“WebPublishMethod”、“文件系统”)
.SetTargets(“构建”、“发布”)
);

SetProperty(key,value)
是等效的默认值,实际调用将打印到控制台。您将看到
Publish
是否作为参数传递。非常感谢,Matthias。我显然错过了那个方法。