我完全被这个难住了。我通过谷歌堆栈溢出找到的想法对我不起作用,我不知道为什么。
我们最近将项目升级到 Visual Studio 2012 和带有 .NET 4.5 的 MVC 4,现在它不会正确发布。
我们有另一个分支,它只是在 Visual Studio 2012 中发布项目,而没有升级到 MVC4 或 .NET4.5,这似乎可以工作,所以我猜这不是 Visual Studio 问题。只是在我们的项目中设置 MVC 4 的方式。MVC 3 是通过直接从我们在源代码管理(但在任何项目之外)创建的 lib 文件夹中引用 DLL 来添加的。MVC 4 是通过 NuGet 添加的。
问题是 System.Web.Helpers (以及其他)没有出现在已发布应用程序的 bin 目录中。这意味着当它放在测试服务器上时,由于缺少 DLL,它不会运行。
- 我已将 Copy Local 设置为 TRUE(实际上,它已经是,但如果关闭并再次打开,我将其关闭)。我还在某处读到,如果文件存在于 GAC 中,则此设置无关紧要,它不会复制。但是,我已经检查过了,它不在 GAC 中。
- 我确保 MVC 应用程序中的引用指向 NuGet 包文件夹中的文件版本。(最初不是,但我手动编辑了 csproj 文件来做到这一点,因为删除和读取 NuGet 包没有帮助)
- 我添加了一个构建后事件来复制相关文件(这不会影响发布,尽管它们位于项目的 bin 目录中)
_bin_deployableAssemblies
根据Phil Haack 的博客,我试图放置一个文件夹,但似乎这在 Visual Studio 2012 中不起作用。- 我已经尝试修改 csproj 文件(这只是一个 MSBuild 文件)来为我复制相关文件,按照这个 SO answer。但是无论出于何种原因,它也不想工作。
我已经用完了我可以尝试的东西。好吧,我总是可以像其他地方的一些 SO 答案所建议的那样手动复制文件,但这违背了目的。
有任何想法吗?
更新
在上面的要点中为我尝试过的对我不起作用的事情添加了更多内容。