我有一个ASP.NET MVC 2应用程序。
当我执行本地构建时,一切都很酷。所有DLL都包含在bin \ debug文件夹中。问题是当我在Visual Studio 2010中使用Publish Web命令时,它会部署除ExternalAssembly2之外的所有内容。
它似乎忽略了未直接使用的程序集(请记住,ExternalAssembly2仅由ExternalAssembly1使用)。
有什么办法可以告诉Visual Studio 2010包含ExternalAssembly2吗?
我可以写一个调用ExternalAssembly2的虚方法。这确实有效,但我真的不想让虚拟代码只是为了让VS2010发布DLL。
答案 0 :(得分:20)
在我看来,这些答案都不够。这似乎是一个真正的错误。如果我找到非破解解决方案,或者Microsoft修复了该错误,我将更新此响应。
更新
答案 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)
那么,我们能在这做什么? 1.使用一些不需要的代码来使用任何ExternalAssembly2的类。 2.逃避反射并使用静态组件链接。
希望这有助于smbd。
答案 12 :(得分:0)
我遇到了同样的问题,这是一个VS2010错误,如果有一个参考链接,如: Web项目 - >自定义项目 - > assembly1 - >(间接)assembly2。
现在我发现如果我在Web项目中引用Assembly1,那么assembly2就包含在bin文件夹中。 所以我不得不添加一个额外的参考链接,如: 网络项目 - > assembly1 - >(间接)assembly2。 然后VS可以识别assembly2并将其dll文件包含在发布操作中。