System.Web.Helpers не публикуется Visual Studio 2012

Я совершенно озадачен этим. Идеи, которые я нашел через переполнение стека Google, не работают для меня, и я понятия не имею, почему.

Недавно мы обновили проект до Visual Studio 2012 и MVC 4 с .NET 4.5, и теперь он не публикуется должным образом.

У нас есть еще одна ветка, в которой просто публикуется проект в Visual Studio 2012 без обновления до MVC4 или .NET4.5, и это, кажется, работает, поэтому я предполагаю, что это не проблема Visual Studio. Просто что-то с тем, как MVC 4 настроен в нашем проекте. MVC 3 был добавлен путем ссылки на библиотеки DLL непосредственно из папки lib, которую мы создали в системе управления версиями (но вне каких-либо проектов). MVC 4 добавляется через NuGet.

Проблема в том, что System.Web.Helpers (среди прочего) не отображаются в каталоге bin опубликованного приложения. Это означает, что когда он будет помещен на тестовый сервер, он не будет работать, так как DLL отсутствует.

  • Я установил для Copy Local значение TRUE (на самом деле это уже было, но я отключил его и снова включил). Я также где-то читал, что если файл существует в GAC, не имеет значения, какой этот параметр, он не будет копироваться. Однако я проверил, и его нет в GAC.
  • Я убедился, что ссылка в приложении MVC указывает на версию файла в папке пакетов NuGet. (Изначально этого не было, но я вручную отредактировал файл csproj, чтобы сделать это, поскольку удаление и чтение пакета NuGet не помогло)
  • Я добавил событие после сборки для копирования соответствующих файлов (что не влияет на публикацию, хотя они находятся в каталоге bin проекта)
  • Я попытался установить папку _bin_deployableAssemblies в соответствии с блог Фила Хаака, но кажется, что это не работает в Visual Studio 2012.
  • Я попытался изменить файл csproj (который является просто файлом MSBuild), чтобы скопировать для меня соответствующие файлы, согласно этому ответу SO. Но по какой-то причине это тоже не хочет работать.

У меня закончились вещи, которые я могу попробовать. Что ж, я всегда могу скопировать файл вручную, как предлагалось в некоторых ответах SO, но это противоречит цели.

Любые идеи?

ОБНОВЛЕНИЕ

Добавлено больше вещей в пунктах выше для вещей, которые я пробовал, но которые не работают для меня.


person Colin Mackay    schedule 10.10.2013    source источник


Ответы (2)


Как насчет этого:

  1. Щелкните правой кнопкой мыши проект MVC в обозревателе решений.
  2. Добавить развертываемые зависимости
  3. Отметьте MVC
person Jacek Glen    schedule 10.10.2013
comment
У меня нет такой возможности. Я читал об этом в блоге Фила Хаака и попробовал операцию вручную, но в любом случае она не работает в VS 2012 в соответствии с этим: stackoverflow.com/questions/12389368/ - person Colin Mackay; 10.10.2013

Я нашел ответ. Это немного хак, потому что я не мог заставить команду копирования 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>
person Colin Mackay    schedule 11.10.2013