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



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

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

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

但我找不到简单的方法来使用target";发布"在MSBuild上,但不知道如何设置发布目录。

例如,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)
);
});

我在NUKE:中将其转换为Target

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 WHERE应该发布它。

我将非常感谢你的回答,致以最良好的问候,Martin

感谢Matthias,我成功地解决了这个问题(请参阅问题评论(。

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

Target BuildService => _ => _
.Executes(() =>
{
var csprojFile = RootDirectory + @"CoreMyProject.ServiceMyProject.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")
);

最新更新