代码之家  ›  专栏  ›  技术社区  ›  Carl

为什么在使用msbuild编译时缺少bin目录中的程序集?

  •  4
  • Carl  · 技术社区  · 16 年前

    我有一个包含许多类库的解决方案和一个引用这些程序集的ASP.NET网站。

    当我在ide中构建解决方案时,网站引用的所有程序集最终都位于bin目录中。伟大的!

    在命令行中使用msbuild时,所有引用的程序集都不会复制到bin目录。为什么?

    我的命令行很简单:

    msbuild.exe d:\myproject\mysolution.sln
    
    9 回复  |  直到 11 年前
        1
  •  1
  •   George Sealy    16 年前

    我在网上找到了很多关于这个问题的参考资料——我自己也遇到过。显然,命令行上的msbuild在跟踪依赖链方面不如ide好。

    所以据我所知,如果a依赖于b,而b依赖于c,那么命令行可能没有意识到a依赖于c。

    我找到的唯一解决方案是确保手动设置项目依赖项,以便ASP项目引用它所依赖的所有内容—不要期望它能够在命令行上全部解决这些问题。这对我很有效,虽然我只有5个项目,所以这不是一个束缚开始。

    我希望这能有帮助。

        2
  •  1
  •   vangorra    12 年前

    我面临的问题是我有一个依赖于图书馆项目的项目。为了构建,我遵循以下步骤:

    msbuild.exe myproject.vbproj /T:Rebuild
    msbuild.exe myproject.vbproj /T:Package
    

    这当然意味着我在bin中丢失了库的dll文件,最重要的是在包zip文件中。我觉得这很管用:

    msbuild.exe myproject.vbproj /T:Rebuild;Package
    

    我不知道为什么这项工作或为什么它没有在一开始。但希望能有所帮助。

        3
  •  0
  •   Rob    16 年前

    您引用的是哪个msbuild?是对的吗?

    我通常这样调用(从批处理文件中):

    %windir%\microsoft.net\framework\v3.5\msbuild.exe deploy.proj/v:n

    在本例中,deploy.proj只是一个常规的msbuild文件,它在对.sln文件调用msbuild之前和之后执行一些其他操作。

        4
  •  0
  •   El Padrino    16 年前

    我认为只有当bin目录不是框架默认的解决方案时,才会出现这个问题。

    我知道msbuild使用设置的每个项目来构建它。如果是这样,请转到每个项目属性页并检查生成后事件命令行参数。

        5
  •  0
  •   Community CDub    7 年前

    您可以始终使用msbuild中的复制任务将程序集拉入正确的目录。不久前我问了一个问题,最后我自己回答了。它显示了如何设置复制任务以获取来自另一个项目的输出并将其拉入目标项目中:

    MSBuild copy output from another project into the output of the current project

        6
  •  0
  •   kenny    16 年前

    我没有为asp.net使用msbuild,而是使用aspnet_编译器。不过…我不记得为什么了。对不起的。

    %windir%\Microsoft.Net\framework\v2.0.50727\aspnet_compiler -v \%~n1  -f -p .\%1 .\Website
    
        7
  •  0
  •   benPearce    15 年前

    可以使用项目属性中的后期生成步骤将项目的输出复制到特定位置。

    这将复制到与sln文件位于同一目录中的程序集目录。我在所有项目的后期构建步骤中都有这个。

    md "$(SolutionDir)Assemblies"
    del "$(SolutionDir)Assemblies\$(TargetFileName)"
    copy "$(TargetPath)" "$(SolutionDir)Assemblies" /y
    
        8
  •  0
  •   Henry Aloni    11 年前

    msbuild 3.5和msbuild 4.5的已知问题。我使用的msbuild 4位于

     c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe <yourSolutionFile>.sln
    

    它似乎解决了这个问题。

        9
  •  -3
  •   Bruno Shine    16 年前

    如果我记得的话,msbuild不会复制引用的程序集。 我不久前发布了一个“解决方案”: http://www.brunofigueiredo.com/post/Issue-Tracker-part-IV-The-Build-Enviroment-using-MSBuild-(or-NAnt).aspx

    希望有帮助。