53

我有一个 ASP.NET MVC 2 应用程序。

  • Web 项目包含对 SomeProject 的引用
  • SomeProject 包含对 ExternalAssembly1 和 ExternalAssembly2 的引用。
  • SomeProject 显式调用 ExternalAssembly1,而不是 ExternalAssembly2。
  • ExternalAssembly1 调用 ExternalAssembly2

当我执行本地构建时,一切都很酷。所有 DLL 都包含在 bin\debug 文件夹中。问题是当我在 Visual Studio 2010 中使用 Publish Web 命令时,它会部署除 ExternalAssembly2 之外的所有内容。

它似乎忽略了不直接使用的程序集(请记住,ExternalAssembly2 仅由 ExternalAssembly1 使用)。

有什么方法可以告诉 Visual Studio 2010 包含 ExternalAssembly2?

我可以编写一个调用 ExternalAssembly2 的虚拟方法。这确实有效,但我真的不想为了让 VS2010 发布 DLL 的唯一目的而使用虚拟代码。

4

13 回答 13

20

在我看来,这些答案都不够。这似乎是一个真正的错误。如果我找到非黑客解决方案或 Microsoft 修复了该错误,我将更新此回复。

更新:

似乎没有希望。 https://connect.microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-including-all-dlls

于 2010-05-24T15:14:14.293 回答
7

我有同样的问题(虽然不同的程序集)。如果我在我的 web 项目中引用程序集,那么它们将包含在发布输出中,但无论如何它们都应该包含在内,因为它们是间接依赖项:

Web 项目 ---> 程序集 A ---> 程序集 B

在构建时,程序集 A 和 B 输出到 \bin 文件夹。发布时,只有程序集 A 输出到发布文件夹。

我已尝试更改发布设置以包含Web 项目中的所有文件,但随后我的发布输出中有不应部署的文件。

这对我来说似乎是一个错误。

于 2010-05-15T16:20:53.013 回答
6

我对 VS2010 和 WCF 服务应用程序有同样的问题。

事实证明,如果您(直接或间接)引用的 DLL 部署到 GAC,VS 发布功能会将它们排除在外。从 GAC 中删除程序集后,发布功能开始按预期工作。

我猜 VS 假设如果您的程序集可以位于您构建的机器上的 GAC 中,它们也将位于目标机器上的 GAC 中。至少在我的情况下,这个假设是错误的。

于 2012-06-13T10:48:26.810 回答
3

我的测试表明,当我在 Web 项目中引用外部程序集时,它们就会被发布。我不必编写任何虚拟代码来使其工作。这对我来说似乎可以接受。

我同意 Nicholas 的观点,这似乎是视觉工作室中的一个错误。至少它让我无法理解这种行为的原因是什么。

于 2010-05-18T19:10:21.883 回答
3

我已将此问题创建为 Microsoft Connect 上的错误。如果任何遇到它的人都可以投票https://connect.microsoft.com/VisualStudio/feedback/details/637071/publish-web-feature-not-including-all-dlls那么希望我们能完成一些事情。

于 2011-01-20T09:59:25.043 回答
2

如果您进入 ExternalAssembly2 参考属性列表并将“复制本地”更改为“真”,我认为这可能会解决您的问题。

于 2010-05-14T15:01:53.833 回答
2

我不知道你是否还在看这个,但我通过这篇 MSDN 文章找到了解决方案(我遇到了完全相同的问题)。在文件的“构建操作”下,选择应该将其包含在发布带来的文件列表中的“内容”。

于 2010-10-04T15:42:46.863 回答
2

我在这里创建了一个新的连接错误https://connect.microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-including-all-dlls

我还附上了重现此问题的解决方案和详细步骤。希望这次他们不会因为无法复制而关闭它。

如果您遇到缺少 dll 问题,请投票支持此连接问题。

于 2012-03-15T08:37:36.587 回答
2

复制本地就可以了。我遇到了一个问题,即 Newtonsoft.Json 程序集包含在 deploymeny 包中。复制本地设置为假。

于 2014-02-04T08:56:06.507 回答
1

我在 Web 项目中遇到了相同类型的问题。我有一个引用程序集 A 的 Web 项目,它引用程序集 B。它工作了一段时间,但今天它坏了。我对解决方案进行了重建,这次它正确部署了所有内容。

于 2011-03-03T21:01:32.483 回答
1

我今天遇到了同样的问题。我发布了我的 Web 项目并意识到并非所有的参考 DLL 都在那里。特别是间接 DLL 引用。

事实证明,我发布到的目录已用完磁盘空间(网络共享)。除了少数间接引用 DLL 之外,我只有足够的空间来发布所有文件。可悲的是 VS08 没有抛出任何错误。它刚刚发布的文件很正常。我清理了一些硬盘空间,一切正常。

在我尝试手动移动 DLL 之前,我没有发现硬盘空间问题。

于 2011-07-11T19:06:46.713 回答
1

就我而言,这非常棘手。构建项目不需要引用 ExternalAssembly2,但对于运行时至关重要,因为我们使用反射来配置 Unity 容器。所以,我删除了引用 - 成功构建项目,但得到运行时错误。如果我保留引用,我可以构建和运行应用程序,但我不能使用 ExternalAssembly2 发布它 - 也会获得运行时异常。这是由于内部 VS2010 程序集优化而发生的。

那么,我们可以在这里做什么?1. 放一些不需要的代码来使用任何 ExternalAssembly2 的类。2. 摆脱反射并使用静态程序集链接。

希望这有助于 smbd。

于 2012-06-19T12:47:13.287 回答
0

我遇到了同样的问题,如果有一个参考链接,例如:Web Project --> custom project --> assembly1 -->(indirectly) assembly2,这是一个 VS2010 错误。

现在我发现如果我在 web 项目中引用了 Assembly1,那么 assembly2 会包含在 bin 文件夹中。所以我不得不添加一个额外的参考链接,比如:Web 项目 --> 程序集 1 -->(间接)程序集 2。然后 VS 可以识别 assembly2 并将其 dll 文件包含在发布操作中。

于 2011-01-18T11:13:28.777 回答