1

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

我们最近将项目升级到 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 答案所建议的那样手动复制文件,但这违背了目的。

有任何想法吗?

更新

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

4

2 回答 2

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>
于 2013-10-11T08:25:53.553 回答
0

这个怎么样:

  1. 在解决方案资源管理器中右键单击 MVC 项目。
  2. 添加可部署的依赖项
  3. 勾选 MVC
于 2013-10-10T14:05:54.787 回答