Публикация веб-приложения в относительном пути файловой системы - PullRequest
48 голосов
/ 05 июля 2011

Я настраиваю публикацию по относительному пути для локального тестирования (особенно преобразования конфигурации xml). Каждый разработчик имеет свой собственный путь к извлеченному проекту, и я хотел бы настроить публикацию, которая не зависит от машины / среды.

Диалог публикации не намекает ни на какие переменные или подстановочные знаки, разрешенные в нем, и не принимает obj\publish или file://./obj/publish

Есть ли способ публикации по относительному пути файловой системы?

Ответы [ 6 ]

50 голосов
/ 07 ноября 2012

Для тех, кто использует 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.Оттуда вы должны пройти вверх, чтобы добраться туда, куда вам нужно.

17 голосов
/ 11 июля 2011

Редактировать

Для Visual Studio 2012 это решение не будет работать. Вы должны посмотреть на ответ michielvoo сразу после этого.

Оригинальный ответ

После попыток и попыток я нашел решение: вы можете использовать относительный путь, установив

file:///./obj/publish

в диалоговом окне Publish WebApp, но вы должны использовать путь, который уже существует и доступен для записи пользователем, которого вы используете. Таким образом, вы можете опубликовать свое веб-приложение в локальной папке или в папке, связанной с путем.

Дайте мне знать, если это поможет. Это для меня.

5 голосов
/ 13 февраля 2014

Это сработало для меня в Visual Studio 2013:

file:\\..\..\..\Publish

Обратите внимание, что эта публикация выполняется не для obj \ publish, как хотел оригинальный автор, а в другой каталог (несколько папок вверх) в моей системе, как я и хотел. Измените его для obj \ publish, если хотите.

4 голосов
/ 27 июля 2016

VS 2015 принимает что-то вроде

..\..\..\DeployFiles

Он также создаст папку, если она отсутствует, поэтому ваши параметры публикации могут перейти в систему контроля версий, но вы можете легко игнорировать папку DeployFiles и ее содержимое.

3 голосов
/ 28 октября 2014

В Visual Studio 2012 работает обычный путь с косыми чертами:

../../../../../app

Это начинается в корневом каталоге опубликованного проекта.

0 голосов
/ 30 марта 2016

Для случая, когда дополнительный шаг после публикации должен вызвать 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).Я не думаю, что это может быть введено в диалоге.

С " как-можно-получить-оценить-и-напечатать-полный-путь-когда-то-учитывая-а-относительная ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...