ローカルでテストするために相対パスへの公開を設定しています (特に xml 構成変換)。各開発者は、チェックアウトされたプロジェクトへの独自のパスを持っており、マシン/環境に依存しないパブリッシュを設定したいと考えています。
発行ダイアログは、その中で許可されている変数やワイルドカードを示唆しておらず、受け入れobj\publish
たり、file://./obj/publish
相対ファイルシステム パスに発行する方法はありますか?
ローカルでテストするために相対パスへの公開を設定しています (特に xml 構成変換)。各開発者は、チェックアウトされたプロジェクトへの独自のパスを持っており、マシン/環境に依存しないパブリッシュを設定したいと考えています。
発行ダイアログは、その中で許可されている変数やワイルドカードを示唆しておらず、受け入れobj\publish
たり、file://./obj/publish
相対ファイルシステム パスに発行する方法はありますか?
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 ディレクトリに解決されることに注意してください。そこから上に移動して、必要な場所に移動する必要があります。
Visual Studio 2012 の場合、このソリューションは機能しません。この直後の michielvoo による回答を参照してください。
試行錯誤した後、解決策を見つけました。設定することで相対パスを使用できます
file:///./obj/publish
ただし、Publish WebApp
既に存在し、使用しているユーザーが書き込み可能なパスを使用する必要があります。このようにして、Web アプリをローカル フォルダーまたはパス関連のフォルダーに公開できます。
これが役立つかどうか教えてください。それは私のためにしました。
Visual Studio 2012 では、スラッシュを含む通常のパスのみが機能します。
../../../../../app
これは、公開されたプロジェクトのルート ディレクトリから始まります。
これはVisual Studio 2013でうまくいきました:
file:\\..\..\..\Publish
元の投稿者が望んでいたように、これは obj\publish には公開されませんが、私が望むように私のシステムの別のディレクトリ (いくつかのフォルダー) に公開されることに注意してください。必要に応じて、obj\publish に変更します。
VS 2015 は次のようなものを受け入れます
..\..\..\DeployFiles
存在しない場合はフォルダーも作成されるため、発行設定をソース管理に入れることができますが、DeployFiles フォルダーとその内容は簡単に無視できます。
追加の公開後の手順で相対パスを使用して 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-evaluate-and-print-the-full-path-when-given-a-relative」から。