Ошибка MSBuild MSB3021: невозможно скопировать файл. Не удалось найти файл ' objReleasemyWebProject1.ДЛЛ'

при использовании TeamCity для компиляции моего сценария задачи MSBuild XML происходит сбой:

[10:43:03]: myWebProject1 myWebProject 1 .csproj (3s)
[10:43:07]: [ myWebProject1 myWebProject1 .csproj] _CopyWebApplicationLegacy
[10:43:07]: [_CopyWebApplicationLegacy] Copy
[10:43:07]: [Copy] C:Program FilesMSBuildMicrosoftVisualStudiov10.0WebApplicationsMicrosoft.WebApplication.targets(131, 5): error MSB3021: Unable to copy file "objReleasemyWebProject1.dll" to "C:MSBUILDRELEASEmyWebProject1binmyWebProject1.dll". Could not find file 'objReleasemyWebProject1.dll'.

когда я запустить его локально, он работает.

когда я сравниваю свой локальный вывод с выводом сервера сборки, на моем сервере сборки отсутствуют файлы. Как Глобал.файл asax отсутствует в моем выходном каталоге сервера сборки (но не при компиляции этого локально). Почему так?

вот мой текущий MSBuildScript:

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

  <PropertyGroup>
    <OutputDir>C:MSBUILDRELEASE</OutputDir>
  </PropertyGroup>

  <ItemGroup>
    <ProjectToBuild Include="UtilityApp.sln" >
      <Properties>OutputPath=$(OutputDir);Configuration=MSBuildRelease;Platform=x86</Properties>
    </ProjectToBuild>
  </ItemGroup>

  <Target Name="Build">
    <MSBuild Projects="@(ProjectToBuild)"/>
            <CallTarget Targets="Publish WebProject1" />
            <CallTarget Targets="Publish WebProject2" />  
  </Target>

<Target Name="Publish WebProject1">
 <RemoveDir Directories="$(OutputFolder)"
       ContinueOnError="true" />
 <MSBuild Projects="WebProject1WebProject1.csproj"
      Targets="ResolveReferences;_CopyWebApplication"
      Properties="WebProjectOutputDir=$(OutputDir)WebProject1;
      OutDir=$(OutputDir)WebProject1;Configuration=Release;Platform=AnyCPU" />
</Target>

<Target Name="Publish WebProject2">
 <RemoveDir Directories="$(OutputFolder)"
       ContinueOnError="true" />
 <MSBuild Projects="WebProject2WebProject2.csproj"
      Targets="ResolveReferences;_CopyWebApplication"
      Properties="WebProjectOutputDir=$(OutputDir)WebProject2;
      OutDir=$(OutputDir)WebProject2;Configuration=Release;Platform=AnyCPU" />
</Target>

</Project>

Я могу запустить этот скрипт локально и, кажется, работает нормально (без ошибок). Когда я запускаю его на своем сервере сборки, он терпит неудачу с ошибкой MSBuild MSB3021.

теперь, когда я сравниваю свои локальные выходные файлы сборки с выходными файлами сборки сервера, на выходе сервера не так много файлов. Например, глобальный.Файл ASAX отсутствует в выходных данных на моем buildserver. Почему он будет работать локально для меня, но не на моем сервере сборки TeamCity? Какая разница и как я могу это исправить?

Я заметила Сообщение об ошибке агента сборки TeamCity имеет забавный путь к каталогу: "C:MSBUILDRELEASEmyWebProject1binmyWebProject1.DLL-файл"

^ перед папкой bin есть две косые черты. Я нигде этого не указываю. Что происходит? У меня такое чувство, что я не строю свои веб-проекты правильно (может быть, использовать другой подход к задаче?). Это, кажется, работает локально, но не на моем сервере сборки.

правильно ли я создаю свои веб-проекты? Это просто веб-проекты для веб-службы (ASMX) развертывание. Помочь?

6 ответов


потратив 3 часа на эту ошибку, я начал новый проект и я импортировал каждый файл из старого проекта по одному. Я смог скомпилировать между каждым файлом, пока не добавил последний файл.

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

Я не могу сказать, почему это сработало, но я решил эту проблему, добавив / удалив пустые классы со случайными именами для моего проекта.

после пары добавления / компиляции / удаления / компиляции снова VS начал работать правильно.


просто догадка, но я заметил, что вы создаете решение с Platform=x86, а затем вызываете два веб-проекта с Platform=AnyCPU. Если эти два проекта создаются решением, расположение вывода может отличаться для сборки и последующего вызова для развертывания.

некоторые другие Примечания:

Я обычно избегаю CallTarget и предпочел бы эту форму в вашем случае:

<Target Name="BuildProjects">
    <MSBuild Projects="@(ProjectToBuild)" />
</Target>
<Target Name="Build"
    DependsOnTargets="BuildProjects;Publish WebProject1;Publish WebProject2"
    />

двойные косые черты обычно указывают на один из двух вещи:

$(OutDir)$(Intervening)\bin

либо промежуточное свойство не было оценено, если $(Intervening) пусто, либо одна из частей пути уже заканчивается конечной косой чертой, если свойство $(OutDir) уже имеет конечную косую черту.

Я никогда не знал, что у вас могут быть пробелы в целевом имени, я должен был проверить его, чтобы быть уверенным, и это сработало!


У меня была эта проблема при попытке развертывания в appharbor, для меня, исключая файл, затем повторно включая его Исправлена проблема


в то время как у меня была такая же ошибка; в моем случае у меня был Wix (v3.9) проект развертывания (MSI-для настольного приложения), который запускал Heat.exe для сбора файла из выходной папки. Оказалось, что VS и Heat не играют хорошо, если у вас нет

RunAsSeparateProcess= "true"

атрибут, установленный в задаче предварительной сборки каталога Heat. Нашел это после многих часов разочарования. см.Wix HeatFile Задача Блокировки Dll для сведения. HTH кто-то.


Шаг 1: перезагрузите ваш визуальный студии.

Шаг 2: Сборка > > перенастроить приложение.

Я понял это правильно.