MSBuild错误MSB3021:无法复制文件.找不到文件'obj\Release\myWebProject1.dll'

D3v*_*r0n 23 .net msbuild teamcity .net-4.0 msbuild-task

使用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'.
Run Code Online (Sandbox Code Playgroud)

当我在本地运行它时,它的工作原理.

当我将本地输出与构建服务器输出进行比较时,构建服务器上缺少文件.就像我的构建服务器输出目录中缺少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>
Run Code Online (Sandbox Code Playgroud)

我可以在本地运行此脚本,它似乎工作正常(没有生成错误).当我在我的构建服务器上运行它时,它失败并出现MSBuild错误MSB3021.

现在,当我将本地构建输出文件与我的服务器构建输出文件进行比较时,服务器输出没有那么多文件.例如,我的buildserver输出中缺少global.ASAX文件.为什么它对我来说是本地的,而不是我的TeamCity构建服务器?有什么区别,我该如何解决?

我注意到TeamCity构建代理错误消息有一个有趣的目录路径:"C:\ MSBUILDRELEASE\myWebProject1\bin\myWebProject1.dll"

^ bin文件夹前有两个斜杠.我没有在任何地方指定.是什么赋予了?我有一种感觉,我没有正确构建我的Web项目(也许使用不同的任务方法?).它似乎在本地工作,但不在我的构建服务器上.

我正确构建我的Web项目吗?这些只是Web Service(ASMX)部署的Web项目.救命?

Car*_*arl 11

好吧,我明白了.这是"配置"不匹配.您有一个带有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>
Run Code Online (Sandbox Code Playgroud)


Ste*_*n27 7

我在很长时间没有打开的旧项目中经常遇到这个问题

对我有用的解决方案是:

  1. 打开项目文件夹并删除bin文件在此输入图像描述

  2. 确保项目配置设置为“调试”而不是“发布”在此输入图像描述

  3. 构建项目- VS 将创建新的 bin 文件夹

    在此输入图像描述

我认为这个问题在某种程度上与发布有关。