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

5

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

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

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

我的命令行只是:

msbuild.exe d:\myproject\mysolution.sln

你需要提供更多的信息。 - kͩeͣmͮpͥ ͩ
我不确定我能提供更多的信息。我错过了什么?谢谢。 - Carl
9个回答

1

我在网络上找到了许多关于这个问题的参考资料,而且我自己也遇到了这个问题。显然,命令行上的MSBuild在跟踪依赖链方面不如IDE好。

所以我理解的是,如果A依赖于B,B又依赖于C,那么命令行可能无法意识到A依赖于C。

我找到的唯一解决方案是确保您手动设置项目依赖项,以便ASP项目引用其所依赖的所有内容-不要指望它能够在命令行上找出所有内容。这对我有用,尽管我只有5个项目,所以启动起来并不困难。

希望这可以帮到你。


1
我遇到的问题是我的项目依赖于一个库项目。为了构建,我按照以下步骤进行:
msbuild.exe myproject.vbproj /T:Rebuild
msbuild.exe myproject.vbproj /T:Package

这当然意味着我在 bin 中和最重要的包 zip 文件中缺少我的库的 dll 文件。我发现以下方法可以完美解决:

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

我不知道为什么这个工作或者一开始为什么它没有工作。但是希望这可以帮到你。


0
你可以利用项目属性中的后期生成步骤将项目的输出复制到特定位置。
这将在与 Sln 文件相同的目录中复制到一个 Assemblies 目录。我在所有项目的后期生成步骤中都有这个操作。
md "$(SolutionDir)Assemblies"
del "$(SolutionDir)Assemblies\$(TargetFileName)"
copy "$(TargetPath)" "$(SolutionDir)Assemblies" /y

0

已知问题对于MSBuild 3.5和msbuild 4.5。我正在使用找到的Msbuild 4

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

看起来解决了这个问题。


0
你引用的是哪个msbuild?是正确的吗?
通常我会这样调用(从批处理文件中):
%WINDIR%\Microsoft.NET\Framework\v3.5\msbuild.exe deploy.proj /v:n
在这个例子中,deploy.proj只是一个普通的msbuild文件,在调用.sln文件之前和之后做一些其他的事情。

是的,这是正确的。sln中的所有程序集都会被编译,但它们不会像在IDE中编译时那样复制到bin目录中。 - Carl

0

我认为此问题仅在 bin 目录不是框架默认目录时才会出现。

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


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

从另一个项目复制MSBuild输出到当前项目的输出


0
我没有使用msbuild来进行ASP.NET编译,而是使用aspnet_compiler。不过...我不记得为什么了。抱歉。
%windir%\Microsoft.Net\framework\v2.0.50727\aspnet_compiler -v \%~n1  -f -p .\%1 .\Website

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接