Team Build, скопировать файл целевой проблемы - PullRequest
2 голосов
/ 16 января 2009

У меня есть настройки для этой команды после компиляции

  <Target Name="AfterCompile">
    <Copy SourceFiles="$(SolutionRoot)\Development_VS2008\MyCompanyName.SharePoint.12" DestinationFolder="c:\testing"></Copy>
  </Target>

Я хочу скопировать структуру папок из источника в место назначения ...

Удивительно, но я получаю эту ошибку

Не удалось скопировать файл "C: \ TFS \ NightlyBuild \ Sources \ Development_VS2008 \ MyCompanyName.SharePoint.12 \" в файл назначения "c: \ testing \", потому что местом назначения является папка, а не файл. Чтобы скопировать исходный файл в папку, рассмотрите возможность использования параметра DestinationFolder вместо DestinationFiles.

Как вы видите, я действительно использую параметр destinationfolder, кто-нибудь знает, что я делаю неправильно?

Ответы [ 6 ]

5 голосов
/ 16 января 2009

Я думаю, это может быть просто потому, что SourceFiles - это каталог, а не файлы, которые вы хотите скопировать. Попробуйте это:

<Target Name="AfterCompile">
    <ItemGroup>
        <FilesToCopy Include="$(SolutionRoot)\Development_VS2008\MyCompanyName.SharePoint.12\**\*.*"/>
    </ItemGroup>

    <Copy SourceFiles="@(FilesToCopy)" DestinationFolder="c:\testing\%(RecursiveDir)"/>
</Target>
2 голосов
/ 16 января 2009

Вам нужно что-то вроде этого:

<CreateItem Include="someFolder\**\*.*">

    <Output ItemName="files" TaskParameter="Include" />

</CreateItem>

<Copy SourceFiles="@(files)" DestinationFiles="@(files->'C:\folder\%(relativedir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />

Или, наоборот, я нашел самый простой способ (если вы хотите быть более строгим в отношении того, что включать / исключать) - это написать несколько пользовательских задач MSBuild: http://www.aaron -powell.com /blog.aspx?cat=AaronPowell.MSBuild.Tasks

Вы указываете исходный каталог, направление назначения (предоставляется поддержка общих сетевых ресурсов) и имена / расширения файлов для исключения.

Это связано главным образом с тем, что Team Build создает настоящий беспорядок (особенно с веб-приложениями) при запуске, и на самом деле невозможно использовать стандартные задачи копирования MSBuild.

1 голос
/ 24 сентября 2018

Эта ошибка произошла со мной не в проекте Team Foundation, а в автономном, и когда я добавил новый DLL-файл с действием сборки ContentWithTargetPath. Я хотел, чтобы эта библиотека была включена в мой выходной каталог. Запись об этом действии появляется в одном из разделов ItemGroup в файле .csproj, например:

<ContentWithTargetPath Include="Resources\Libraries\libName.dll">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</ContentWithTargetPath>

Но по какой-то причине этого недостаточно, чтобы опция ContentWithTargetPath работала нормально (я видел объяснение об этом где-то в StackOverflow, но не помню где). Вы должны вручную добавить подраздел TargetPath к ContentWithTargetPath следующим образом:

<ContentWithTargetPath Include="Resources\Libraries\libName.dll">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  <TargetPath>libName.dll</TargetPath>
</ContentWithTargetPath>

Подраздел TargetPath не отображается IntelliSense при редактировании файла .csproj в Visual Studio, а также не отображается в окне свойств libName.dll, поэтому вы должны добавить этот подраздел вручную. Этот сценарий появляется даже в моем Visual Studio Community 2017.

PS. Вы можете редактировать файл .csproj, находясь в Visual Studio - выгрузите этот проект и выберите опцию «Edit YourProjectName.csproj» (щелкните правой кнопкой мыши по незагруженному проекту). Отредактируйте и сохраните файл .csproj, затем перезагрузите проект.

0 голосов
/ 06 августа 2013

У меня было точно такое же сообщение:

Ошибка 103 Не удалось скопировать файл "obj \ Release \ xxxx.dll" в файл назначения "bin \ Release \ xxxx.dll", поскольку место назначения - это папка, а не файл. Чтобы скопировать исходный файл в папку, рассмотрите возможность использования параметра DestinationFolder вместо DestinationFiles. хххх

Случилось (я не знаю почему), что у меня в папке выпуска была другая папка с таким же именем сборки (включая расширение), поэтому Visual Studio не смогла создать сборку там. Это не конфигурация в проекте или решении, поэтому я просто удалил папку (я не знаю, как она была создана), и она сработала.

0 голосов
/ 25 октября 2011

Задача копирования, очевидно, не поддерживает копирование каталогов (так как она основана на 'копировании'), и xcopy иногда завершается ошибкой из-за длинных имен файлов в источнике (> 256 символов).

Я сделал это (с робокопией): <Exec WorkingDirectory="$(MSBuildProjectDirectory)" Command='robocopy $(MSBuildProjectDirectory)\Main $(DropLocation) /S /COPY:DATS /NP /NFL /NDL /v' ContinueOnError="true" />

0 голосов
/ 16 января 2009

У нас много проблем с командами пост-сборки xcopy. И мы решили избежать команд xcopy.

Теперь мы включаем файлы (которые мы хотим скопировать) в проект, и мы устанавливаем для свойства copy local значение «Копировать, если новее» и целевой каталог (структура каталога должна быть одинаковой в проекте)

Это очень помогает.
Может быть, это также подходит для вашей ситуации.

...