0

我已阅读了几个good posts关于自动化构建过程,但是,我感兴趣的不仅仅是构建过程,还包括发布。自动发布Visual Studio 2010功能?

我有几个使用基本模型的网站和服务。当我改变这个模型时(这种情况不会经常发生),所有的站点/服务都必须重建并发布到合适的目标目录(已经包含在他们的配置中)。

所有项目文件夹都存在于一个文件夹中。

我正在考虑的方法是使用MSBuild从主文件夹运行脚本,并使用要构建/发布的项目的命名列表。

我发现为MSBuild here创建构建脚本的一个很好的例子,但是,这只能满足一个项目的构建。

我将如何通过项目/目录的命名列表来执行相同的构建/发布脚本?

谢谢。

+1

您是否考虑过创建解决方案? MSBuild也知道如何构建它们。 – 2011-12-15 17:57:52

+0

这让我走上了另一条轨道......我会检查出来的,谢谢。 – ElHaix 2011-12-16 17:34:26

回答

0

所以我终于有时间再看看这个。

我创建了以下MSBuild脚本,它位于我拥有的所有网站的相同级别的文件夹中。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 


    <Target Name ="DeleteFiles"> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\debug\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\release\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).pdb"></Delete> 
    </Target> 

    <Target Name="Compile" DependsOnTargets="DeleteFiles"> 
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj" 
     Targets="Clean;Build" 
     Properties="OutputPath=..\$(ProjectName)\bin"/> 
    </Target> 

    <Target Name="Deploy" DependsOnTargets="Compile"> 
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj" 
     Targets="ResolveReferences;_CopyWebApplication" 
     Properties="OutDir=C:\inetpub\wwwroot\$(ProjectName)\bin\;WebProjectOutputDir=C:\inetpub\wwwroot\$(ProjectName)" /> 
    </Target> 


</Project> 

,被称为是这样的:

的MSBuild的build.xml /p:ProjectName="websitetopublish.com”/V:N

一个网站的伟大工程,但是我想要一个批处理相关的解决方案来读取文本文件。对于该文本文件中的每个条目执行构建过程。

我很容易写一个.Net控制台应用程序到这个,但矫枉过正,我想知道如何使用一些循环机制在批处理文件中完成此操作。

0

使用一个<ItemGroup />元素与自定义元数据产生类似如下:

<ItemGroup> 
     <ProjectToPublish Include="WebApplication1\WebApplication1.csproj" > 
       <OutputDir>OutputDir1</OutputDir> 
     </ProjectToPublish> 
     <ProjectToPublish Include="WebApplication2\WebApplication2.csproj" > 
       <OutputDir>OutputDir2</OutputDir> 
     </ProjectToPublish> 
    </ItemGroup> 

    <Target Name="Publish" Inputs="@(ProjectsToPublish)" Outputs="%(Identity).Dummy"> 
     <RemoveDir Directories="%(OutputDir)" ContinueOnError="true" /> 
     <MSBuild Projects="%(Identity)" 
     Targets="ResolveReferences;_CopyWebApplication" 
     Properties="WebProjectOutputDir=$(OutputDir); 
     OutDir=%(OutputDir)\" /> 
    </Target> 
1

最终的可重用解决方案如下。

回顾:

我有一个根文件夹谁的目录和项目文件的名称都被命名为网站的价值的几个地点。我希望能够从命令行发布所有网站(或选定的列表) - 运行脚本。这些网站将被发布到我的IIS服务器目录。

首先,创建一个MSBuild的脚本,需要在网站名称的参数:

<?xml version="1.0" encoding="utf-8" ?> 
<Project DefaultTargets="Compile,Deploy" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <Target Name ="DeleteFiles"> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\debug\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\release\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).pdb"></Delete> 
    </Target> 

    <Target Name="Compile" DependsOnTargets="DeleteFiles"> 
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj" 
     Targets="Clean;Build" 
     Properties="OutputPath=..\$(ProjectName)\bin"/> 
    </Target> 

    <Target Name="Deploy" DependsOnTargets="Compile"> 
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj" 
     Targets="ResolveReferences;_CopyWebApplication" 
     Properties="OutDir=C:\inetpub\wwwroot\$(ProjectName)\bin\;WebProjectOutputDir=C:\inetpub\wwwroot\$(ProjectName)" /> 
    </Target> 

</Project> 

接下来,创建每行一个网站名称的文本文件。这可以通过执行“dir> sites.txt”然后列编辑出多余的内容来轻松生成。

即。

​​

最后,创建一个包含在sites.txt遍历列表的批处理文件,并执行脚本的MSBuild:

@echo -------------------------------------------- 
@echo -- Iterating through list in sites.txt -- 
@echo -------------------------------------------- 
for /f %%X in (sites.txt) do msbuild build.xml /p:ProjectName="%%X" /v:n 

该解决方案驻留在目录上的同一水平其余的网站来自根目录,这就是为什么构建脚本中的“.. \ $(ProjectName)”。

发布一堆网站的好方法,并希望这可以帮助某人。