web-dev-qa-db-ja.com

Webアプリケーションは相対ファイルシステムパスにパブリッシュします

ローカルでテストするための相対パスにパブリッシュを設定しています(特にxml構成変換)。各開発者は、チェックアウトされたプロジェクトへの独自のパスを持っています。マシン/環境に依存しないパブリッシュをセットアップしたいと思います。

公開ダイアログは、その中で許可されている変数やワイルドカードを示唆せず、obj\publishまたはfile://./obj/publishを受け入れません。

相対ファイルシステムパスに公開する方法はありますか?

49
Maslow

編集する

Visual Studio 2012の場合、このソリューションは機能しません。あなたはこれの直後にmichielvooによる答えを見るべきです。

元の答え

試してみて、解決策を見つけました:設定することで相対パスを使用できます

file:///./obj/publish

の中に Publish WebAppダイアログですが、すでに存在し、使用しているユーザーが書き込み可能なパスを使用する必要があります。この方法で、ローカルフォルダーまたはパス関連フォルダーにWebアプリを公開できます。

これで効果があるかどうかをお知らせください。それは私のためにした。

17
marzapower

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 2013で私のために働きました:

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

元の投稿者が望んだように、これはobj\publishには公開されませんが、必要に応じてシステム上の別のディレクトリ(いくつかのフォルダーが上)に公開されることに注意してください。必要に応じて、obj\publish用に変更します。

5
Dean

VS 2015は次のものを受け入れます

..\..\..\DeployFiles

フォルダーが欠落している場合もフォルダーを作成するため、公開設定をソース管理に入れることができますが、DeployFilesフォルダーとその内容は簡単に無視できます。

4
wingyip

スラッシュを含む通常のパスだけがVisual Studio 2012で機能します。

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

これは、公開されたプロジェクトのルートディレクトリから始まります。

4
DKroot

追加の発行後ステップで相対パスを指定して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 "から。

0
crokusek