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

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

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

如果它有帮助我计划使用Cake作为构建机制.

最佳答案
利用蛋糕,我能够提出一个有点混乱的解决方案:

var excludedFiles = new Listfig"};
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的名字;这就是我们所有的网络应用程序的名称,所以对我们来说它是安全的,但肯定可以改进.

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

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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...