Подтвердить что ты не робот

"Не удается найти допустимый AspnetMergePath" в публикации для веб-разработчиков Visual?

Я хочу использовать Visual Web Developer Express 2010 для публикации веб-сайта, предварительно скомпилированного на удаленный сервер через FTP, используя следующие настройки:

  • Развертывание только файлов, необходимых для запуска этого приложения
  • Предварительно скопируйте это приложение перед публикацией
  • Разрешить обновление веб-сайта
  • Базы данных не развертываются
  • Сайт развертывается как иерархия файлов, а не как .zip-пакет.

Моя первая сборка/развертывание, похоже, прошла хорошо, но после моей второй компиляции я получил следующую ошибку:

Transformed web.config using C:\path_to_site\Web.Debug.config into obj\Debug\TransformWebConfig\transformed\web.config.
Copying all files to temporary location below for package/publish:
obj\Debug\AspnetCompileMerge\Source.
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.5\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets(132,5): Error : Can't find the valid AspnetMergePath

И вот подмножество содержимого файла Microsoft.Web.Publishing.AspNetConfigurationMerge.targets:

  <Target
      Name="GetAspNetMergePath"
      DependsOnTargets="$(GetAspNetMergePathDependsOn)"
      Condition ="'$(GetAspNetMergePath)' != 'false'">
    <PropertyGroup>
      <AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
      <AspnetMergePath Condition="Exists('$(TargetFrameworkSDKToolsDirectory)$(AspnetMergeName)')">$(TargetFrameworkSDKToolsDirectory)</AspnetMergePath>
    </PropertyGroup>
    <Error Condition="'$(AspnetMergePath)' == '' Or !Exists($(AspnetMergePath))"
           Text="Can't find the valid AspnetMergePath" />
  </Target>

EDIT: изменение настроек публикации для удаления всех существующих файлов перед публикацией не устраняет проблему в конце концов. Я предполагаю, что проблема сейчас локальна из-за этого.

В моем web.config не присутствует тег AspMergePath. Я не знаю, должен ли я вручную добавить тег. Однако в моем проекте существует путь "obj {publish setting}\AspnetCompileMerge\Source].

И в случае, если это имеет значение, мое имя проекта - "TestProject.NET"

Ваши отзывы приветствуются.

4b9b3361

Ответ 1

Вам нужен файл aspnet_merge.exe, который распространяется как часть Windows SDK. Он предназначен для прекомпиляции сайтов, поэтому вы можете отключить эту предварительную компиляцию или установить правильную версию Windows SDK. Ссылка на Википедию, из-за хороших подготовленных ссылок на страницы загрузки. Вам не нужно загружать/устанавливать все (оно огромно), просто загрузите веб-установщик и выберите инструменты .Net, он займет около 50 мегабайт.

Обратите внимание, что в комплекте с Visual Studio 2010 Windows SDK ver. 7.0A недоступно для отдельной загрузки, поэтому вам придется либо установить Visual Studio на свой сервер сборки, либо настроить что-то, как описано в ответах на "Запуск MSBuild не читается SDKToolsPath".

Ответ 2

Вот решение, которое не требует изменения файла целей. Обходной путь от http://connect.microsoft.com/VisualStudio/feedback/details/786492/publish-cant-find-the-valid-aspnetmergepath предполагает передачу дополнительных свойств в msbuild. Я смог заставить его работать, используя это:

msbuild website.publishproj/p: DeployOnBuild = true/p: PublishProfile = Release/p:VisualStudioVersion = 12.0/p: AspnetMergePath = "C:\Program Files (x86)\Microsoft SDK\Windows\v8.1A\bin\NETFX 4.5.1 Инструменты \"

Ключевым здесь является свойство AspnetMergePath, которое может потребоваться изменить, если Windows SDK установлен в другом месте. Если я включаю свойство GetAspNetMergePath из обходного пути, это терпит неудачу, но это может потребоваться в зависимости от версии SDK.

Ответ 3

Я столкнулся с той же проблемой. Искал через все связанные с Майкрософт сайты, нашел много жалоб и никаких намерений от Microsoft, чтобы исправить это.

Вот как я работал в моей системе. Отредактируйте файл Microsoft.Web.Publishing.AspNetConfigurationMerge.targets и добавьте следующую строку. Убедитесь, что путь к Microsoft SDK на вашем компьютере одинаков, если не изменить его:

<TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\</TargetFrameworkSDKToolsDirectory>

Вот как это должно выглядеть:

  <Target
  Name="GetAspNetMergePath"
  DependsOnTargets="$(GetAspNetMergePathDependsOn)"
  Condition ="'$(GetAspNetMergePath)' != 'false'">
<PropertyGroup>
  <TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\</TargetFrameworkSDKToolsDirectory>
  <AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
  <AspnetMergePath Condition="Exists('$(TargetFrameworkSDKToolsDirectory)$(AspnetMergeName)')">$(TargetFrameworkSDKToolsDirectory)</AspnetMergePath>
</PropertyGroup>
<Error Condition="'$(AspnetMergePath)' == '' Or !Exists($(AspnetMergePath))"
       Text="Can't find the valid AspnetMergePath" />

Ответ 4

Одним из способов обойти это: [включая установку SDK и т.д.] - отключить опцию Precompile On Publish, которая требует присутствия AspNetMerge, даже если вы не указали, что хотите, чтобы материал сливался в конечном выход.

Я собирался рассказать о том, как отключить его, поглядеть на диалог опций и прочитать дружественное руководство, чтобы подтвердить, что он отключился целую вечность, только чтобы понять, что это флажок вне:

введите описание изображения здесь

Снижая отметку, вы получаете следующие изменения в .pubxml:

-    <PrecompileBeforePublish>True</PrecompileBeforePublish>
-    <EnableUpdateable>True</EnableUpdateable>
-    <DebugSymbols>False</DebugSymbols>
-    <WDPMergeOption>DonotMerge</WDPMergeOption>

Что сработало для меня.

NB, однако важно иметь как описано здесь, как Web (который беззвучно сделает публикацию через /p:DeployOnBuild инертным) и WebApplications (который даст ошибку компилятора), находящиеся под %Program Files (x86)%\MSBuild\Microsoft\VisualStudio\v14.0 (при условии, что Visual Studio 2015 tooling) для публикации, чтобы успешно создавать пакеты

Ответ 5

Я столкнулся с той же проблемой.

Отредактируйте файл Microsoft.Web.Publishing.AspNetConfigurationMerge.targets и добавьте следующую строку. Убедитесь, что запустите редактор с правами администратора.

Выбирает верную версию Visual Studio в моем случае VS2013.

64

<TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\</TargetFrameworkSDKToolsDirectory>

x 86

<TargetFrameworkSDKToolsDirectory>C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\</TargetFrameworkSDKToolsDirectory>

И это работает! Я могу скомпилировать свой проект.