Deployment Visual Studio 2010发布Web功能不包括所有DLL

Deployment Visual Studio 2010发布Web功能不包括所有DLL,deployment,visual-studio-2010,asp.net-mvc-2,build-process,msdeploy,Deployment,Visual Studio 2010,Asp.net Mvc 2,Build Process,Msdeploy,我有一个ASP.NETMVC2应用程序 Web项目包含对SomeProject的引用 SomeProject包含对ExternalAssembly1和ExternalAssembly2的引用 SomeProject显式调用ExternalAssembly1,但不调用ExternalAssembly2 ExternalAssembly1调用ExternalAssembly2 当我执行本地构建时,一切都很酷。所有DLL都包含在bin\debug文件夹中。问题是,当我在VisualStudio20

我有一个ASP.NETMVC2应用程序

  • Web项目包含对SomeProject的引用
  • SomeProject包含对ExternalAssembly1和ExternalAssembly2的引用
  • SomeProject显式调用ExternalAssembly1,但不调用ExternalAssembly2
  • ExternalAssembly1调用ExternalAssembly2
当我执行本地构建时,一切都很酷。所有DLL都包含在bin\debug文件夹中。问题是,当我在VisualStudio2010中使用PublishWeb命令时,它部署了除ExternalAssembly2之外的所有内容

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

有没有办法让Visual Studio 2010包含ExternalAssembly2


我可以编写一个调用ExternalAssembly2的伪方法。这确实有效,但我真的不想让伪代码仅仅用于导致VS2010发布DLL。

如果您进入ExternalAssembly2引用属性列表并将“Copy Local”更改为“True”,我认为这可能会解决您的问题

我遇到了同样的问题(尽管不同的组件)。如果我引用web项目中的程序集,则它们将包含在发布输出中,但无论如何都应包含它们,因为它们是间接依赖项:

Web项目-->Assembly A-->Assembly B

生成时,程序集A和B将输出到\bin文件夹。发布时,仅将程序集A输出到发布文件夹

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


这对我来说似乎是一个bug。

我的测试表明,当我在web项目中有外部程序集的引用时,这些外部程序集就会被发布。我不必编写任何伪代码来让它工作。这对我来说似乎是可以接受的


我同意Nicholas的观点,这似乎是VisualStudio中的一个bug。至少我不知道这种行为的原因是什么。

这些答案在我心目中都是不够的。这似乎是一个真正的错误。如果我找到了非黑客解决方案,或者微软修复了这个bug,我会更新这个响应

更新:

看起来不太有希望。
我不知道你是否还在看这部电影,但我通过找到了解决方案(我遇到了完全相同的问题)。在文件的“构建操作”下,选择“内容”,该内容应包括在发布带来的文件列表中。

我也遇到了同样的问题,如果有如下参考链接,这就是VS2010错误: Web项目-->自定义项目-->程序集1-->(间接)程序集2

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

我已将此问题创建为Microsoft Connect上的错误。如果有人对此进行投票,那么希望我们能有所行动。

我在一个web项目中也遇到了同样的问题。我有一个引用程序集a的web项目,它引用程序集B。它工作了一段时间很好,但今天它被破坏了。我重新构建了解决方案,这次它正确地部署了所有内容。

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

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


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

我在这里创建了一个新的连接错误

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


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

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

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


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

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

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


希望这对smbd有所帮助。

Copy local成功了。我遇到了一个问题,Newtonsoft.Json程序集包含在deploymeny包中。复制本地已设置为false。

感谢您的响应,但这已经设置好了(这就是本地构建工作的原因)。这并不能解决出版问题,我同意。现在,我想我将使用虚拟方法,它只调用我需要发布的每个DLL。不过这仍然是一个黑客攻击。我不应该参考