在使用MsBuild进行编译时,为什么我从bin目录中缺少程序集?

时间:2008-11-07 14:23:30

标签: asp.net msbuild

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

当我在IDE中构建解决方案时,网站引用的所有程序集最终都在bin目录中。太好了!

当我从命令行使用MsBuild时,所有引用的程序集都不会复制到bin目录。为什么呢?

我的命令行很简单:

msbuild.exe d:\myproject\mysolution.sln

9 个答案:

答案 0 :(得分:1)

我发现各种各样的问题都散布在网络上 - 而且我自己也遇到过这个问题。显然,命令行上的MSBuild不像IDE那样跟踪依赖链。

据我所知,如果A依赖于依赖于C的B,命令行可能没有意识到A依赖于C.

我发现的唯一解决方案是确保您手动设置项目依赖项,以便ASP项目引用它所依赖的所有内容 - 不要指望它能够在命令行上全部解决它们。这对我来说很有用,虽然我只有5个项目,但这并不是一件好事。

我希望这会有所帮助。

答案 1 :(得分:1)

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

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

这当然意味着我在bin中丢失了我的库的dll文件,最重要的是在包zip文件中。我发现这很有效:

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

我不知道为什么这项工作或为什么它首先没有。但希望有所帮助。

答案 2 :(得分:0)

你引用了哪个msbuild?它是正确的吗?

我通常这样称呼(来自批处理文件):

  

%WINDIR%\ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe deploy.proj / v:n

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

我没有使用msbuild for ASP.NET,而是使用aspnet_compiler。虽然......我不记得为什么。遗憾。

%windir%\Microsoft.Net\framework\v2.0.50727\aspnet_compiler -v \%~n1  -f -p .\%1 .\Website

答案 6 :(得分:0)

您可以使用项目属性中的Post-Build步骤将项目的输出复制到特定位置。

这将复制到与Sln文件相同的目录中的Assemblies目录。我在所有项目的后期构建步骤中都有这个。

md "$(SolutionDir)Assemblies"
del "$(SolutionDir)Assemblies\$(TargetFileName)"
copy "$(TargetPath)" "$(SolutionDir)Assemblies" /y

答案 7 :(得分:0)

MSBuild 3.5和msbuild 4.5的已知问题。我在

使用的是Msbuild 4
 c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe <yourSolutionFile>.sln

似乎解决了这个问题。

答案 8 :(得分:-3)

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

希望它有所帮助。