2012-06-11 6 views
10

私は、次のコマンドを呼び出すことにより、MSBuildのを使用して自分のWebアプリケーションを公開:パッケージターゲットのルートフォルダを指定する方法は?

msbuild myweb.csproj /T:Package /P:PackageLocation=obj\Output\myweb.zip 

zipファイルの内容は、ドライブのルートからプロジェクトフォルダへの完全なパスを含む、常に深いフォルダ構造を有しています。より平らにする方法はありますか?私はzipのルートのようなプロジェクトフォルダを持っていたいと思います。

答えて

10

IIS形式のフラットな構造にはPackageLocationの代わりに_PackageTempDirを使用できますが、マニフェストを指定して.zipと.cmdを保持する場合は、絶対にMicrosoft.Webを書き換えずに絶対パスから離れることはできません.Publishing.targetsまたはカスタムタスクは、varの使用方法のために削除されます。

あなたはしかし、トリックのMSBuildすることができますし、ローカルの共有と絶対パスを非表示にすることで、それを少し平らに、このような何か
<_PackageTempDir>$(PackageTempRootDir)\PackageTmp</_PackageTempDir> 
<_PackageTempDirFullPath>$([System.IO.Path]::GetFullPath($(_PackageTempDir))</_PackageTempDirFullPath> 
<_MSDeployDirPath Include="$(_PackageTempDir)" /> 
<_MSDeployDirPath_FullPath>@(_MSDeployDirPath->'%(FullPath)')</_MSDeployDirPath_FullPath> 

:ような何かにあなたの深い地元のパスを変更します

net share foo=D:\Temp 
msbuild WebApplication1.csproj /t:Package /p:PackageTempRootDir=\\localhost\foo 

obj\Debug\Package\WebApplication1.zip\Content\_S_Slocalhost_Sfoo\PackageTmp

+0

なぜPackageTempRootDirを_PackageTempDirに設定するのですか? –

+0

@ScottStafford理由はなく、別のオプションです。私は 'PipelinePreDeployCopyAllFilesToOneFolder'を直接使用して、不必要な二重パッケージ化や時折のシンボリックリンクを防ぐようになりました。 –

+0

その解決策を見て奇妙なこと...これは私にとって偉大な働きをしてくれました。 –

関連する問題