gpt4 book ai didi

c# - 使用 MSBuild 构建时如何复制 ASP.NET 项目的内容?

转载 作者:太空狗 更新时间:2023-10-29 23:30:17 25 4
gpt4 key购买 nike

我正在为我们的一些应用程序编写一些新的构建脚本,当前脚本使用 MSBuild 就地构建所有项目,然后手动复制所有内容( View 、脚本等...)和 bin手动文件夹到要压缩的工件文件夹;这要求所有不属于 ASP.NET 项目 bin 目录的文件和文件夹都明确列在配置文件中,这当然极易出错。

在指定输出目录时是否可以使用 MSBuild 来包含内容文件?理想情况下,这将在不创建发布配置文件的情况下完成,因为当前的部署方法不可更改,因此我需要确保我的构建工件与当前的相匹配。

如果有帮助,我计划将 Cake 用于构建机制。

最佳答案

利用 cake 我想出了一个有点困惑的解决方案:

var excludedFiles = new List<string>{"Settings.settings", "packages.config"};
var artifactDir = "./Artifact";
var solutionFile = "./MySolution.sln";

Task("Package")
.IsDependentOn("Build")
.Does(() =>
{
var solution = ParseSolution(solutionFile);
foreach (var project in solution.Projects)
{
var parsedProject = ParseProject(project.Path);
var binDir = project.Path.GetDirectory() + Directory("/bin");

if(project.Name.Contains("Host"))
{
var soaDir = Directory(artifactDir + "/SOA");
CreateDirectory(soaDir);
CopyDirectory(binDir, soaDir + Directory("bin"));
foreach(var file in parsedProject.Files)
{
if(!file.Compile && excludedFiles.All(x=> !file.FilePath.ToString().Contains(x)))
{
var newFilePath = soaDir + File(file.RelativePath);
CreateDirectory(((FilePath)newFilePath).GetDirectory());
CopyFile(file.FilePath, newFilePath);
}
}
}
}
});

此处的包任务将在解决方案中解析一个循环遍历项目以查找任何包含单词 Host is their names 的项目;这就是我们所有网络应用程序的命名方式,因此对我们来说它是安全的,但肯定可以改进。

一旦我们确定了 ASP.NET 项目,我们就会复制它的 bin 内容,然后遍历它的文件以查找任何未标记为编译的文件,并排除一些特定文件,如设置文件和 nuget 包配置文件。

最后,我们可以使用该文件的相对路径将文件复制到工件目录中。

关于c# - 使用 MSBuild 构建时如何复制 ASP.NET 项目的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31867052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com