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

时间:2010-05-12 01:29:41

标签: deployment visual-studio-2010 asp.net-mvc-2 build-process msdeploy

我有一个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。

13 个答案:

答案 0 :(得分:20)

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

更新

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

答案 1 :(得分:7)

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

Web项目--->组装A --->大会B

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

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

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

答案 2 :(得分:6)

我在VS2010和WCF服务应用程序方面遇到了同样的问题。

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

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

答案 3 :(得分:3)

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

我同意尼古拉斯的看法,这似乎是视觉工作室的一个错误。至少它让我无法理解这种行为的原因。

答案 4 :(得分:3)

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

答案 5 :(得分:2)

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

答案 6 :(得分:2)

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

答案 7 :(得分:2)

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

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

如果您遇到丢失的dll问题,请投票支持此连接问题。

答案 8 :(得分:2)

复制本地做了伎俩。我遇到了一个问题,即Newtonsoft.Json程序集包含在deploymeny包中。复制本地设置为false。

答案 9 :(得分:1)

我遇到了与Web项目相同类型的问题。我有一个Web项目引用程序集A引用程序集B.它工作正常一段时间,但今天它已被打破。我重建了解决方案,这次它正确地部署了所有内容。

答案 10 :(得分:1)

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

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

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

答案 11 :(得分:1)

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

那么,我们能在这做什么? 1.使用一些不需要的代码来使用任何ExternalAssembly2的类。 2.逃避反射并使用静态组件链接。

希望这有助于smbd。

答案 12 :(得分:0)

我遇到了同样的问题,这是一个VS2010错误,如果有一个参考链接,如: Web项目 - >自定义项目 - > assembly1 - >(间接)assembly2。

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