Visual Studio 2010发布Webfunction不包括所有的DLL
我有一个ASP.NET MVC 2应用程序。
- Web项目包含对SomeProject的引用
- SomeProject包含对ExternalAssembly1和ExternalAssembly2的引用。
- SomeProject显式调用ExternalAssembly1,但不是ExternalAssembly2。
- ExternalAssembly1调用ExternalAssembly2
当我执行本地构build时,一切都很酷。 所有DLL都包含在bin \ debug文件夹中。 问题是,当我在Visual Studio 2010中使用Publish Web命令时,它将部署除了ExternalAssembly2之外的所有内容。
它似乎忽略不直接使用的程序集(请记住,ExternalAssembly2仅由ExternalAssembly1使用)。
有没有什么办法可以告诉Visual Studio 2010包含ExternalAssembly2?
我可以编写一个调用ExternalAssembly2的虚拟方法。 这是行得通的,但我真的不希望虚拟代码的唯一目的是使VS2010发布该DLL。
在我看来,这些答案都不够。 这似乎是一个真正的错误。 如果我find了非黑客解决scheme,或者Microsoft修复了这个错误,我将更新此响应。
更新:
我有这个相同的问题(虽然不同的程序集)。 如果我在我的Web项目中引用程序集,那么它们将包含在发布输出中,但是它们应该被包含在内,因为它们是间接依赖项:
Web Project —> Assembly A —> Assembly B
在构build上,组件A和B输出到\ bin文件夹。 发布时,只有程序集A输出到发布文件夹。
我已经尝试更改发布设置以包括Web项目中的所有文件,但是我的发布输出中的文件不应该部署。
这对我来说似乎是一个错误。
我有与VS2010和WCF服务应用程序相同的问题。
事实certificate,如果您的(直接或间接)引用的DLL被部署到GAC,VS发布function将排除它们。 一旦我从GAC中删除程序集,发布function就开始按预期工作。
我想VS是假设如果你的程序集可以在你生成的机器上的GAC中,那么它们也将位于目标机器上的GAC中。 至less在我的情况下,这个假设是错误的。
我的testing表明,外部程序集发布时,我有他们在Web项目中的参考。 我不必编写任何虚拟代码来使其工作。 这似乎是可以接受的。
我同意Nicholas的观点,这似乎是视觉工作室中的一个错误。 至less它逃避了我的行为的原因可能是什么。
我已经创build此问题作为Microsoft Connect上的错误。 如果有人遇到它可以投票它https://connect.microsoft.com/VisualStudio/feedback/details/637071/publish-web-feature-not-including-all-dlls然后希望我们会得到的东西做了。;
如果进入ExternalAssembly2引用属性列表并将“复制本地”更改为“真”,我认为这可能会解决您的问题。
我不知道你是否仍然在看这个,但我通过这个MSDN文章find了解决scheme(我有完全相同的问题)。 在文件的“构build动作”下,select“内容”,将其包含在发布的文件列表中。
我在这里创build了一个新的连接错误https://connect.microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-including-all-dlls
我还附上了解决scheme和详细的步骤来重现此问题。 让我们希望这次他们不会因为不能重现而closures它。
如果您遇到缺less的dll问题,请为此连接问题投票。
复制当地的伎俩。 我有一个问题,Newtonsoft.Json程序集包含在deploymeny包中。 复制本地被设置为false。
我正在遇到与Web项目相同types的问题。 我有一个引用程序集B的组件A的Web项目。它工作很好,但今天它已经坏了。 我做了重build的解决scheme,这次它正确地部署一切。
今天我也有同样的问题。 我发布了我的Web项目,并意识到并不是所有的参考DLL都在那里。 特别是,间接的DLL引用。
事实certificate,我发布的目录磁盘空间不足(networking共享)。 我只有足够的空间来发布除less数间接引用DLL之外的所有文件。 可悲的是VS08没有发现任何错误。 它只是公布的文件是平常的。 我清除了一些硬盘空间,一切正常。
我没有find硬盘空间问题,直到我试图手动移动DLL的结束。
在我的情况下,这是相当棘手的。 由于我们使用reflection来configurationUnity容器,所以对构build项目不需要引用ExternalAssembly2,但对于运行时至关重要。 所以,我删除了引用 – 成功构build项目,但得到运行时错误。 如果我保留引用,我可以构build和运行应用程序,但我不能用ExternalAssembly2发布它 – 也得到运行时exception。 这是由于内部VS2010程序集优化而发生的。
那么,我们可以在这里做什么? 1.将一些不必要的代码放在任何ExternalAssembly2的类中。 2.从reflection逃脱并使用静态组件链接。
希望这有助于smbd。
我得到了同样的问题,这是一个VS2010的错误,如果有像Web项目 – >自定义项目 – > assembly1 – >(间接)assembly2的参考链接。
现在我发现如果我在Web项目中引用Assembly1,那么assembly2包含在bin文件夹中。 所以我不得不添加一个额外的引用链接,如:Web项目 – > assembly1 – >(间接)assembly2。 然后VS可以识别assembly2并在发布操作中包含其dll文件。