MSBuild发布Web站点项目到文件系统不会复制来自引用项目的dll

3

上下文

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

这个Web站点项目最近升级到了.NET 4.0,这也意味着我们需要更新我们的构建服务器使用的wdproj。我尝试了这个,但不幸的是,构建持续失败。
我决定摆脱wdproj并使用更新的发布配置文件。在VS2012中生成这个非常容易。
在构建服务器上,我使用了以下命令:

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

在PublishProfile中,WebPublishMethod是FileSystem,因此只需要将所有内容复制到一个文件夹中。
问题
网站项目包含6个ProjectReferences,由msbuild构建。生成的文件夹包含这些项目的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

搞定了!

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

感谢Sayed Hashimi提供的帮助!


-1
在网站项目中包含所有从项目引用的dll并不总是一个好主意,特别是当您使用依赖注入时:您的Web项目只想添加对接口dll/项目的引用,而不是任何具体实现的dll。因为如果您直接添加对实现dll/项目的引用,您将无法防止开发人员调用实现dll/项目的具体类上的“new”,而不是通过接口,这也是您在网站中声明使用实现的“硬编码”。

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