我有一个包含许多类库的解决方案和一个引用这些程序集的ASP .NET网站。
当我在IDE中构建解决方案时,网站引用的所有程序集最终都在bin目录中。太好了!
当我从命令行使用MsBuild时,所有引用的程序集都不会复制到bin目录。为什么呢?
我的命令行很简单:
msbuild.exe d:\myproject\mysolution.sln
答案 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
希望它有所帮助。