首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用msBuild在核构建中发布解决方案

如何使用msBuild在核构建中发布解决方案
EN

Stack Overflow用户
提问于 2020-12-08 00:46:36
回答 2查看 443关注 0票数 3

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

我有一个相当庞大的使用.NET框架的解决方案(31个项目)。我们过去常常使用CAKE build进行构建和部署过程,但现在我必须将该过程转移到nuke-build。我使用的是MSBuild,不是DotNet。

我设法将任务(从蛋糕)转换为目标(Nuke),并修复了不同目标之间的依赖关系。解决方案构建。

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

例如,蛋糕中的一个任务看起来像这样:

代码语言:javascript
复制
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)
    );
});

我把它转换成了NUKE中的Target:

代码语言:javascript
复制
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应该在哪里发布它。

马丁,我将非常感谢你的回复,祝你好运

EN

回答 2

Stack Overflow用户

发布于 2020-12-08 21:39:19

多亏了Matthias,我设法解决了这个问题(参见对问题的评论)。

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

代码语言:javascript
复制
    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")
            );
    });

谢谢

票数 4
EN

Stack Overflow用户

发布于 2021-06-01 05:32:48

如果要避免使用发布配置文件,请执行以下操作:

代码语言:javascript
复制
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")
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65185855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档