WebApplication опубликует путь относительной файловой системы
Я создаю публикацию для относительного пути для локального тестирования (особенно преобразования xml config). Каждый разработчик имеет свой собственный путь к проверенному проекту, и я хотел бы настроить публикацию, которая является агностикой машины/среды.
В диалоговом окне публикации не указывается ни на какие переменные или подстановочные знаки, которые разрешены в нем, и не принимает obj\publish
или file://./obj/publish
Есть ли способ публикации на пути относительной файловой системы?
Ответы
Ответ 1
Изменить
Для Visual Studio 2012 это решение не будет работать. Вы должны посмотреть на ответ michielvoo сразу после этого.
Оригинальный ответ
После попытки и попытки я нашел решение: вы можете использовать относительный путь, установив
file:///./obj/publish
в диалоговом окне Publish WebApp
, но вы должны использовать путь, который уже существует и доступен для записи пользователем, которого вы используете. Таким образом, вы можете опубликовать свое веб-приложение в локальной папке или в папке, связанной с дорогой.
Сообщите мне, если это поможет. Это было для меня.
Ответ 2
Для тех, кто использует Visual Studio 2012 и новый файл конфигурации публикации (Properties/PublishProfiles/Local.pubxml
), вы можете использовать этот синтаксис в самом файле:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<publishUrl>$(MSBuildThisFileDirectory)..\..\obj\publish</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
Помните, что свойство $(MSBuildThisFileDirectory) будет разрешено в каталог Local.pubxml. Оттуда вы должны пройти, чтобы добраться туда, где вам нужно.
Ответ 3
Это работало для меня в Visual Studio 2013:
file:\\..\..\..\Publish
Обратите внимание, что это не публикуется в obj\publish, как захотелось оригинальное плакат, а в другой каталог (несколько папок вверх) в моей системе, как я и хотел. Измените его для obj\publish, если хотите.
Ответ 4
В Visual Studio 2012 работает только обычный путь с косой чертой:
../../../../../app
Это начинается с исходного корневого каталога проекта.
Ответ 5
VS 2015 принимает что-то вроде
..\..\..\DeployFiles
Он также создаст папку, если она отсутствует, поэтому ваши параметры публикации могут перейти в исходный элемент управления, но вы можете легко игнорировать папку DeployFiles и ее содержимое.
Ответ 6
Для случая, когда дополнительный пост опубликовать шаг необходимо вызвать msdeploy (MSVS 2015, dnx) с относительным путем, другой альтернативой является редактирование файла проекта (а не pubxml, хотя это тоже может работать) и создать переменную, которая преобразование относительного пути в абсолютный путь.
<Target Name="AfterWebPublish" AfterTargets="WebPublish">
<!--
msdeploy cannot currently handle relative paths for contentPath so first convert it to an absolute path
-->
<PropertyGroup>
<AbsOutDir>$([System.IO.Path]::GetFullPath("$(ProjectDir)$(OutDir)"))</AbsOutDir>
</PropertyGroup>
<Exec WorkingDirectory="$(ProjectDir)" Command='call "$(DevEnvDir)..\Tools\vsvars32.bat"' />
<Exec WorkingDirectory="$(ProjectDir)" Command='"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy" -verb:sync -source:contentPath="$(AbsOutDir)PublishOutput" -dest:package="$(AbsOutDir)$(MSBuildProjectName).zip"' />
</Target>
Затем $(AbsOutDir)
можно использовать в другом месте по мере необходимости (например, для msdeploy contentPath). Я не думаю, что он может быть введен в диалоговом окне.
От "how-can-i-get-msbuild-to-evaluation-and-print-the-full-path-when-given-a-relative".