Папка Bin не копируется с помощью MSBuild, Teamcity - PullRequest
4 голосов
/ 15 октября 2010

У меня очень странная проблема, когда я создал пользовательскую задачу MSBuild, которая переместит все файлы, которые мне нужны для моего проекта MVC, в определенное место, чтобы мы могли его опубликовать.Это прекрасно работает, когда я запускаю скрипт локально на моей машине, но как только я проверяю это, и Teamcity запускает скрипт, он копирует все, кроме папки Bin.Однако, если MSbuild запускается напрямую из командной строки (тот же сценарий), он копирует папку bin.Я не понимаю, почему это не работает, когда TeamCity его строит.

У кого-нибудь есть идея, почему это происходит и как ее решить?

<Target Name="AfterBuild">
   <CallTarget Targets="Move" />
</Target>
<Target Name="Move">
    <Copy SourceFiles="@(BinFolder)" DestinationFolder="$(ArtifactsDir)\Webproject.Web\bin" />
    <Copy SourceFiles="@(ContentFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Content" />
    <Copy SourceFiles="@(ImagesFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Images" />
    <Copy SourceFiles="@(ScriptsFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Scripts" />
</Target>


<ItemGroup>
   <BinFolder Exclude="*.cs" Include="$(ProjectDir)bin\**\*.*"/>
   <ContentFolder Exclude="*.cs;*.svn-base" Include="$(ProjectDir)Content\*.css"/>
   <ImagesFolder Exclude="*.cs;*.svn-base" Include="$(ProjectDir)Images\*.*"/>
   <ScriptsFolder Exclude="*.cs;*.svn-base" Include="$(ProjectDir)Scripts\*.js"/>
</ItemGroup>

$ (ArtifactsDir) - это параметр, который я передаю из Teamcity и вручную в командной строке,

/p:ArtifactsDir="%system.agent.work.dir%\WebProject\trunk\Website"

1 Ответ

5 голосов
/ 15 октября 2010

Я думаю, что это проблема оценки предметов.Ваш элемент «BinFolder» интерпретируется при первом чтении MsBuild вашего файла сборки, т.е. перед сборкой.И я думаю, что $ (ProjectDir) bin ***. * Пуста до сборки.Чтобы избежать этого, вы можете объявить вашу папку в вашей цели, как показано:

<Target Name="AfterBuild">
   <CallTarget Targets="Move" />
</Target>
<Target Name="Move">

    <ItemGroup>
      <BinFolder Exclude="*.cs" Include="$(ProjectDir)bin\**\*.*"/>
    </ItemGroup>

    <Copy SourceFiles="@(BinFolder)" DestinationFolder="$(ArtifactsDir)\Webproject.Web\bin" />
    <Copy SourceFiles="@(ContentFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Content" />
    <Copy SourceFiles="@(ImagesFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Images" />
    <Copy SourceFiles="@(ScriptsFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Scripts" />
</Target>

<ItemGroup>
   <ContentFolder Exclude="*.cs;*.svn-base" Include="$(ProjectDir)Content\*.css"/>
   <ImagesFolder Exclude="*.cs;*.svn-base" Include="$(ProjectDir)Images\*.*"/>
   <ScriptsFolder Exclude="*.cs;*.svn-base" Include="$(ProjectDir)Scripts\*.js"/>
</ItemGroup>

Или вы можете попробовать использовать задачу CreateItem:

<Target Name="Move">

    <CreateItem Exclude="*.cs" Include="$(ProjectDir)bin\**\*.*">
      <Output TaskParameter="Include" ItemName="TheFiles"/>
    </CreateItem>

    <Copy SourceFiles="@(BinFolder)" DestinationFolder="$(ArtifactsDir)\Webproject.Web\bin" />
    <Copy SourceFiles="@(ContentFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Content" />
    <Copy SourceFiles="@(ImagesFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Images" />
    <Copy SourceFiles="@(ScriptsFolder)" DestinationFolder="$(ArtifactsDir)\SchrodersFundEngine.Web\Scripts" />
</Target>

Более подробную информацию вы можете найти здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...