如何复制ASP的内容?. NET项目在使用MSBuild构建时
本文关键字:项目 NET 构建 MSBuild 何复制 复制 ASP | 更新日期: 2023-09-27 18:06:41
我正在为我们的一些应用程序编写一些新的构建脚本,当前的脚本使用MSBuild构建所有项目,然后手动将所有内容(视图,脚本等)和bin文件夹手动复制到工件文件夹中进行压缩;这要求所有不属于ASP的bin目录的文件和文件夹。. NET项目被显式地列在配置文件中,这当然是非常容易出错的。
是否有一种方法使用MSBuild指定输出目录时,也包括内容文件?理想情况下,这将在不创建发布配置文件的情况下完成,因为当前的部署方法不允许更改,所以我需要确保我的构建工件与当前的相匹配。
如果它有帮助,我计划使用蛋糕构建机制
利用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);
}
}
}
}
});
这里的包任务将在解决方案中解析一个遍历项目的循环,以查找任何包含word Host的项目名称;这就是我们所有web应用程序的命名方式,所以对我们来说这是安全的,但肯定可以改进。
一旦我们确定了ASP。. NET项目,我们复制它的bin内容,然后循环遍历它的文件,找到任何没有标记为编译的文件,并排除一些特定的文件,如设置文件和nuget包配置文件。
最后,我们可以使用该文件的相对路径将文件复制到工件目录中。