2017-11-09 16 views
0

私はASP.NETコアアプリケーションを開発しています。VSTSビルドが出力ファイルを適切なディレクトリに公開していないようです

私はソースコントロール用にVSTSをオンラインで使用しています。私はまた、アプリケーションを構築する専用マシンを持っています。

このプロセスを自動化するために、私は今VSTSオンラインからビルドスクリプトを定義しようとしています。

デフォルトのVSTSテンプレートには、多くのタスクが定義されています。私は自分の目的に合っていないすべてのタスクを削除し、「NuGetを使用する」、「NuGet Restore」、および「Build Solution」という3つのタスクだけを実行しました。

「ソリューションのビルド」タスクのデフォルトのMSBuildの引数は次のとおりです。

/p:DeployOnBuild=true /p:WebPublishMethod=Package 
/p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true 
/p:DesktopBuildPackageLocation= 
    "$(build.artifactstagingdirectory)\WebApp.zip" 
/p:DeployIisAppPath="Default Web Site" 

このスクリプトを実行するにはエラーはありませんが、私はそれは、そのような出力がフォルダに行き、パッケージ化されていないことを変更する必要があります。ここで

は私の質問に関連する私のディレクトリ構造の一部である:ここで

C:\Dev\RCWebsite\RCWebsite.sln 
C:\Dev\RCWebsite\RCWeb\RCWeb.csproj 
C:\Dev\RCWebsite\RCWeb\Properties\PublishProfiles\FolderProfile.pubxml 

は、パブリッシュプロファイルの内容です:

<PropertyGroup> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <PublishProvider>FileSystem</PublishProvider> 
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>False</ExcludeApp_Data> 
    <ProjectGuid>d7d9f3b7-fd0e-49c1-b6d2-3af5dddb6699</ProjectGuid> 
    <publishUrl>C:\StagingSites\rcweb</publishUrl> 
    <DeleteExistingFiles>True</DeleteExistingFiles> 
</PropertyGroup> 

コンソールウィンドウから、私は実行することができます次のコマンド:

msbuild .\RCWeb\RCWeb.csproj /p:DeployOnBuild=true 
/p:PublishProfile=RCWeb\Properties\PublishProfiles\FolderProfile.pubxml 

これは期待どおりに動作します。最終出力はC:\StagingSites\rcweb\ディレクトリに生成されます。このコマンドの機能として

、私はとVSTS「ソリューションのビルド」タスクでMSBuildの引数を置き換え:私は、引数として.\RCWeb\RCWeb.csprojを指定していない

/p:DeployOnBuild=true 
/p:PublishProfile=rcWeb\Properties\PublishProfiles\FolderProfile.pubxml 

注意。ビルドの仕組みが自動的にこれを処理すると思います。

このビルドを実行してログファイルを見ると、ソリューションが正常に構築されていることがわかります。ただし、C:\StagingSites\rcweb\ディレクトリにコピーされることはありません。

誰かが私に行方不明を教えてもらえますか? 「ソリューションの構築」タスクの後に別の「展開」タスクが必要ですか?よろしく。

+0

パブリッシュプロファイルへのフルパスを指定してみましたか? '$(Build.SourcesDirectory)'はあなたにルートフォルダを与えます。 –

+0

ご協力いただきありがとうございます。私はそれを試みます。私は、パブリッシュプロファイルファイルが見つからなかった場合、ログファイルにエラーが表示されると想定しました。 – Peter

+0

残念なことに:-( – Peter

答えて

1

このスクリプトを実行する際にエラーはありませんが、出力がフォルダに移動してパッケージ化されないように変更する必要があります。

いいえいいえ、別のデプロイメントタスクは必要ありません。 msbuildを使用してASP .NETプロジェクトをパッケージ化して展開する必要がないので、msbuildに対して/p:DeployOnBuild=trueフラグを取り除くことができます。また、あなたの公開プロフィールを見て、私はあなたが本当にmsbuild(msbuildパラメータatleastから渡すことはできません)に何か情報を渡していないことに気付き、msbuildから直接展開する予定がなくなったので公開プロフィールを脇に保持することをお勧めします。

/p:OutDir=$(Build.BinariesDirectory) /T:Package /p:PackageLocation=$(Build.BinariesDirectory)\WebApp.zip /p:PackageAsSingleFile=true 

この:

パラメータを下にトリミングして(あなたがバイナリをパッケージが、それらを展開しないようにしたい/T:Packageは、MSBuildのを伝えます)いくつかの必要なものを追加した後、これはあなたのMSBuildのコマンドは次のようになります。 .zipファイルを展開する準備ができていることを出力として想定しています。バイナリがする準備ができてフォルダとしてこれが同様にzipファイルを生成します

/p:OutDir=$(Build.BinariesDirectory) /T:Package /p:PackageLocation=$(Build.BinariesDirectory)\WebApp.zip /p:PackageAsSingleFile=true p:_PackageTempDir=$(Build.BinariesDirectory)\MyAspNetWebsite 

:それはそうではないですし、あなただけの直接導入ではなく、zip形式で圧縮することができ、フォルダ内のバイナリが必要な場合は、以下のコマンドを使用することができます

注:powershellスクリプト内でmsbuildコマンドを使用する予定がある場合は、VSO変数に別の方法でアクセスする必要があります(次のようにしてください)。 'BUILD_BINARIESDIRECTORY'

関連する問題