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

时间:2013-10-10 13:03:43

标签: c# asp.net-mvc-4 visual-studio-2012 .net-4.5

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

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

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

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

  • 我将Copy Local设置为TRUE(实际上,它已经是,但是如果关闭再打开我会转动)。我还读到某个地方,如果文件存在于GAC中,那么这个设置是什么并不重要,它不会复制。但是,我已经检查过,它不在GAC中。
  • 我确保MVC应用程序中的引用指向NuGet包文件夹中的文件版本。 (原来不是,但是我手动编辑了csproj文件,因为删除和读取NuGet包没有帮助)。
  • 我添加了一个post-build事件来复制相关文件(虽然它们位于项目的bin目录中,但不影响发布)
  • 我已尝试根据Phil Haack's blog设置_bin_deployableAssemblies文件夹,但似乎是doesn't work in Visual Studio 2012
  • 我尝试修改csproj文件(这只是一个MSBuild文件)来为我复制相关文件as per this SO answer。但是,出于任何理由,也不想工作。

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

有什么想法吗?

更新

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

2 个答案:

答案 0 :(得分:0)

这个怎么样:

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

答案 1 :(得分:0)

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

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

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

  <Target Name="AfterBuild">
    <Message Text="Build | Copying assemblies to output folder ($(OutputPath))" Importance="high" />
    <Exec Command="ECHO Going to copy from '$(ProjectDir)\_bin_PublishAssemblies'" />
    <Exec Command="xcopy $(ProjectDir)\_bin_PublishAssemblies\* $(OutputPath) /Y" />
  </Target>
  <Target Name="CopyBinFiles" AfterTargets="CopyAllFilesToSingleFolderForPackage" BeforeTargets="MSDeployPublish">
    <Message Text="Deploy | Copying assemblies to output folder ($(_PackageTempDir)\bin\)" Importance="high" />
    <Exec Command="ECHO Going to copy from '$(ProjectDir)\_bin_PublishAssemblies'" />
    <Exec Command="xcopy $(ProjectDir)\_bin_PublishAssemblies\* $(_PackageTempDir)\bin\ /Y" />
  </Target>