Dot-Net
MSBuild 錯誤 MSB3021:無法複製文件。找不到文件 ‘objReleasemyWebProject1.dll’
當使用 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 Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets(131, 5): error MSB3021: Unable to copy file "obj\Release\myWebProject1.dll" to "C:\MSBUILDRELEASE\myWebProject1\\bin\myWebProject1.dll". Could not find file 'obj\Release\myWebProject1.dll'.當我在本地執行它時,它可以工作。
當我將本地輸出與建構伺服器輸出進行比較時,我的建構伺服器上缺少文件。就像我的建構伺服器輸出目錄中缺少 global.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="WebProject1\WebProject1.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="WebProject2\WebProject2.csproj" Targets="ResolveReferences;_CopyWebApplication" Properties="WebProjectOutputDir=$(OutputDir)\WebProject2\; OutDir=$(OutputDir)\WebProject2\;Configuration=Release;Platform=AnyCPU" /> </Target> </Project>我可以在本地執行這個腳本,它似乎工作正常(沒有產生錯誤)。當我在建構伺服器上執行它時,它失敗並出現 MSBuild 錯誤 MSB3021。
現在,當我將本地建構輸出文件與伺服器建構輸出文件進行比較時,伺服器輸出沒有那麼多文件。例如,我的建構伺服器的輸出中缺少 global.ASAX 文件。為什麼它可以在我本地工作,但不能在我的 TeamCity 建構伺服器上工作?有什麼區別,我該如何解決?
我注意到 TeamCity 建構代理錯誤消息有一個有趣的目錄路徑:“C:\MSBUILDRELEASE\myWebProject1\bin\myWebProject1.dll”
^ bin 文件夾前有兩個斜線。我沒有在任何地方指定。是什麼賦予了?我感覺我沒有正確建構我的 Web 項目(也許使用不同的任務方法?)。它似乎在本地工作,但不在我的建構伺服器上。
我是否正確建構了我的網路項目?這些只是用於 Web 服務 (ASMX) 部署的 Web 項目。幫助?
好吧,我想通了。這是“配置”不匹配。您有一個使用 Configuration=MSBuildRelease 建構的項目和另外兩個使用 Configuration=Release 建構的項目。MSBuild 然後在錯誤的位置查找“中間”程序集。
將您的程式碼更改為:
<?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="WebProject1\WebProject1.csproj" Targets="ResolveReferences;_CopyWebApplication" Properties="WebProjectOutputDir=$(OutputDir)\WebProject1\; OutDir=$(OutputDir)\WebProject1\;Configuration=MSBuildRelease;Platform=AnyCPU" /> </Target> <Target Name="Publish WebProject2"> <RemoveDir Directories="$(OutputFolder)" ContinueOnError="true" /> <MSBuild Projects="WebProject2\WebProject2.csproj" Targets="ResolveReferences;_CopyWebApplication" Properties="WebProjectOutputDir=$(OutputDir)\WebProject2\; OutDir=$(OutputDir)\WebProject2\;Configuration=MSBuildRelease;Platform=AnyCPU" /> </Target> </Project>