我完全被这个困扰了。我通过谷歌堆栈溢出找到的想法对我不起作用,我不知道为什么。
我们最近使用.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丢失了。
_bin_deployableAssemblies
文件夹,但似乎是doesn't work in Visual Studio 2012。我已经用尽了我可以尝试的东西。好吧,我总是可以手动复制文件,因为有些SO答案已在其他地方提出,但是这样做会失败。
有什么想法吗?
更新
在上面的要点中添加了更多内容,我尝试过的东西对我不起作用。
答案 0 :(得分:0)
这个怎么样:
答案 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>