"Не удается найти допустимый 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"
Ваши отзывы приветствуются.
Ответы
Ответ 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>
И это работает! Я могу скомпилировать свой проект.