System.Web.Helpers未由Visual Studio 2012发布

我完全被这个困扰了。 我通过谷歌堆栈溢出找到的想法对我不起作用,我不知道为什么。

我们最近使用.NET 4.5将项目升级到Visual Studio 2012和MVC 4,现在它无法正常发布。

我们有另一个分支只是在Visual Studio 2012中发布项目而没有升级到MVC4或.NET4.5,这似乎有效,所以我猜它不是Visual Studio问题。 就像在我们的项目中设置MVC 4的方式一样。 通过直接从我们在源代码管理中创建的lib文件夹引用DLL来添加MVC 3(但在任何项目之外)。 通过NuGet添加MVC 4。

问题是System.Web.Helpers(以及其他)未出现在已发布应用程序的bin目录中。 这意味着当它被放置在测试服务器上时,它将不会运行,因为DLL丢失了。

  • 我已经将Copy Local设置为TRUE(实际上,它已经是,但是如果关闭再打开我会转动)。 我还读到某个地方,如果文件存在于GAC中,那么这个设置是什么并不重要,它不会复制。 但是,我已经检查过,它不在GAC中。
  • 我已经确保MVC应用程序中的引用指向NuGet包文件夹中的文件版本。 (它不是最初的,但是我手动编辑了csproj文件来执行此操作,因为删除和读取NuGet包没有帮助)
  • 我添加了一个post-build事件来复制相关文件(虽然它们在项目的bin目录中,但不影响发布)
  • 根据Phil Haack的博客 ,我试图放置一个_bin_deployableAssemblies文件夹,但似乎这在Visual Studio 2012中不起作用 。
  • 我已经尝试修改csproj文件(这只是一个MSBuild文件)来复制相关文件, 根据这个SO答案 。 但是,无论什么理由都不想工作。

我已经用尽了我可以尝试的东西。 好吧,我总是可以手动复制文件,因为有些SO答案已在其他地方提出,但这样做会失败。

有任何想法吗?

UPDATE

在上面的要点中添加了更多的东西,我尝试过的东西对我来说不起作用。

这个怎么样:

  1. 右键单击解决方案资源管理器中的MVC项目。
  2. 添加可部署的依赖项
  3. 勾选MVC

我找到了答案。 这有点像黑客,因为我无法使MSBuild复制命令工作,所以我使用Exec命令让xcopy为我做复制。

首先,我在项目中添加了一个名为_bin_PublishAssemblies的文件夹,并在其中放入了我需要发布的构建过程尚未提取的程序集。

然后我在csproj文件的末尾添加了以下内容: