Вопрос
После того, как MSbuild создал мое решение (с веб-сайтом asp.net), а проект веб-развертывания создал и поместил веб-сайт в каталог _PublishedWebsites:
c:\mybuilds\buildName\Daily_20090519.3 elease_PublishedWebsites\MyWebsite.
Как мне скопировать это в фиксированный каталог, на который указывает IIS для тестового веб-сайта?
Я нашел множество фрагментов кода, но не могу найти ни одного, который бы учитывал тот факт, что имя этого каталога меняется.
Решение
Это довольно легко.Вы можете отредактировать проект и вставить что-то похожее на следующее.
<PropertyGroup>
<OutputDest>$(MSBuildProjectDirectory)\..\OutputCopy\</OutputDest>
</PropertyGroup>
<Target Name="AfterBuild">
<!-- Create an item with all the output files -->
<ItemGroup>
<_OutputFiles Include="$(OutputPath)**\*" Exclude="$(OutputPath)obj\**\*" />
</ItemGroup>
<!-- You probably don't want to include the files in the obj folder so exclude them. -->
<Message Text="OutputDest : $(OutputDest)" />
<Copy SourceFiles="@(_OutputFiles)"
DestinationFiles="@(_OutputFiles->'$(OutputDest)%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>
Это то, что вы ищите?
Моя книга: Внутри Microsoft Build Engine:Использование MSBuild и Team Foundation Build
Другие советы
Я использую другую технику.
<PropertyGroup>
<BinariesRoot>c:\BinariesForIis\</BinariesRoot>
</PropertyGroup>
А c:\BinariesForIis\
будет использоваться для скомпилированных двоичных файлов прямого вывода (перед копированием в ...\Daily_20090519.3\Release_
...).