Окончательное, многоразовое решение выглядит следующим образом.
Резюме:
У меня есть несколько сайтов в корневой папке, каталоги и имена файлов проектов которых названы по значению сайта. Я хочу иметь возможность публиковать все сайты (или выбранный список) из командной строки - запуск сценария. Веб-сайты затем будут опубликованы в моих каталогах сервера 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», а затем колонку, отредактировав лишний контент.
т.
site1.com
site2.com
site3.com
site4.com
Наконец, создайте пакетный файл, который выполняет итерацию по списку, содержащемуся в 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)".
Отличный способ публикации множества сайтов, и надеюсь, что это кому-нибудь поможет.