Ошибка 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: Сборка > > перенастроить приложение.
Я понял это правильно.