MSBuild将网站项目发布到FileSystem不会复制引用项目中的dll

时间:2013-05-22 09:32:30

标签: dll msbuild web-site-project publish-profiles

上下文

在VS2012中,我有1个sln文件,下面有几个项目。有些只是代码库,有些则是Web应用程序。然后我们还有一个网站项目......

此网站项目最近更新为.NET 4.0,这也意味着我们需要更新构建服务器使用的wdproj。我试过这个,但唉,构建一直在失败 我决定摆脱wdproj并使用较新的Publish配置文件。这在VS2012中非常容易生成 在构建服务器上,我使用了以下命令:

<MSBuild Projects="<path to publishproj file>" Properties="DeployOnBuild=true; 
    PublishProfile=name-of-profile; VisualStudioVersion=11.0" />

在PublishProfile中,WebPublishMethod是FileSystem,因此它只需要将所有内容复制到文件夹中。

问题

该网站项目包含6个由msbuild构建的ProjectReferences。生成的文件夹包含这些项目的dll,但缺少这些项目的所有引用的dll,也没有复制附属程序集(子文件夹中的已编译资源文件)。
所以我错过了几个dll!

有没有人知道这方面的解决方案?

已找到信息

我可以找到几个描述相同行为的帖子,但他们要么没有解决方案,要么没有次优的修复。
示例:MSBuild doesn't copy dll references from dependent projects
类似的问题:MSBuild Package via Command line not including all my Assemblies

我也开始研究msbuild进程到Microsoft.WebSite.Publishing.targets中使用的特定拷贝代码。在目标'AfterResolveReferences'中,引用项目的dll被复制,但不是依赖dll。

非常感谢所有帮助!

2 个答案:

答案 0 :(得分:0)

搞定了!

您必须在网站项目中包含项目引用中所有引用的dll。

感谢Sayed Hashimi的帮助!

答案 1 :(得分:-1)

在网站项目中包含来自项目参考的所有引用的dll并不总是一个好主意,特别是当您使用依赖注入时:您的Web项目只是想添加对dll / project接口的引用,而不是任何具体的实现dll 。因为如果直接向实现dll / project添加引用,就不能阻止开发人员在实现dll / project的具体类上调用“new”而不是通过接口调用,它也是你所说的“硬编码” “在您的网站上使用该实施。