3

语境

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

这个网站项目最近更新到 .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 个由 msbuild 构建的 ProjectReference。生成的文件夹包含这些项目的 dll,但缺少这些项目的所有引用 dll,也不会复制附属程序集(子文件夹中的编译资源文件)。
所以我错过了几个dll!

有谁知道这个的解决方案?

已找到信息

我可以找到几篇描述相同行为的帖子,但它们要么没有解决方案,要么没有最佳修复。
示例:MSBuild 不会从依赖项目中复制 dll 引用
类似的问题:MSBuild Package via Command line not included my all my Assemblies

我还开始研究 Microsoft.WebSite.Publishing.targets 中使用的特定复制代码的 msbuild 过程。在目标“AfterResolveReferences”中,复制了引用项目的 dll,但不复制依赖的 dll。

非常感谢所有帮助!

4

2 回答 2

0

得到它的工作!

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

感谢赛义德哈希米的帮助!

于 2013-06-07T06:49:25.247 回答
-1

在网站项目中包含来自项目引用的所有引用的 dll 并不总是一个好主意,尤其是当您使用依赖注入时:您的 Web 项目只想添加对接口 dll/项目的引用,而不是任何具体的实现 dll。因为如果您直接添加对实现 dll/项目的引用,则无法阻止开发人员在实现 dll/项目的具体类上调用“新”而不是通过接口,这也是您声明了“硬代码” " 在您的网站上使用执行。

于 2013-12-04T10:48:44.403 回答