首页 文章

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

提问于
浏览
52

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

  • Web项目包含对SomeProject的引用

  • SomeProject包含对ExternalAssembly1和ExternalAssembly2的引用 .

  • SomeProject显式调用ExternalAssembly1,但不调用ExternalAssembly2 .

  • ExternalAssembly1调用ExternalAssembly2

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

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

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

我可以写一个调用ExternalAssembly2的虚方法 . 这确实有效,但我真的不想让虚拟代码只是为了让VS2010发布DLL .

13 回答

  • 3

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

    更新:

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

  • 6

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

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

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

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

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

  • 1

    我在VS2010和WCF服务应用程序中遇到了同样的问题 .

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

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

  • 7

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

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

  • 2

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

  • 0

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

  • 1

    我不知道你是否还在看这个,但我通过this MSDN article找到了解决方案(我有完全相同的问题) . 在"build action"下为文件选择"Content",它应该包含在发布带来的文件列表中 .

  • 2

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

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

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

  • 3

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

  • 1

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

  • 20

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

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

    我没有找到硬盘空间问题直到我试图手动移动DLL .

  • 2

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

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

    希望这有助于smbd .

  • 2

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

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

相关问题