53

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

発行ダイアログは、その中で許可されている変数やワイルドカードを示唆しておらず、受け入れobj\publishたり、file://./obj/publish

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

4

6 に答える 6

49

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 ディレクトリに解決されることに注意してください。そこから上に移動して、必要な場所に移動する必要があります。

于 2012-11-07T10:23:45.230 に答える
17

編集

Visual Studio 2012 の場合、このソリューションは機能しません。この直後の michielvoo による回答を参照してください。

元の答え

試行錯誤した後、解決策を見つけました。設定することで相対パスを使用できます

file:///./obj/publish

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

これが役立つかどうか教えてください。それは私のためにしました。

于 2011-07-11T14:33:01.913 に答える
7

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

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

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

于 2014-10-27T22:17:46.120 に答える
5

これはVisual Studio 2013でうまくいきました:

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

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

于 2014-02-13T00:31:49.670 に答える
5

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

..\..\..\DeployFiles

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

于 2016-07-27T19:11:11.133 に答える
0

追加の公開後の手順で相対パスを使用して 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」から。

于 2016-03-30T01:04:06.717 に答える