web-dev-qa-db-ja.com

MSBuildは、ClickOnceアプリのPublishUrlプロパティを尊重しません

ワンクリックでいくつかのClickOnceアプリケーションを公開するためのバッチファイルを作成しようとしています。私はそのためにmsbuildを使用しています。例として、以下のコマンドラインは私がそれをどのように行っているかを示しています。

msbuild
    MyApp.sln
    /t:Publish
    /p:Configuration=Release
    /p:PublishUrl="C:\Apps\"
    /v:normal > Log.txt

(読みやすくするために折り返し)

上記のコマンドを実行すると、アプリケーションがビルドされ、リリースディレクトリ(bin\release!)に公開されます。上記の例でmsbuildがPublishUrlプロパティを尊重しない理由はありますか?

PS:「構成」の削除、「再構築」と「発行のみ」のターゲットとしての使用、引用符の削除など、さまざまな組み合わせも試しましたが、成功しませんでした。

23
TheBlueSky

一部の機能は、MSBuildスクリプトではなくVisual-Studioによって実行されます。そのため、click-once-deploymentは、コマンドラインから実行した場合の動作が異なります。

  • ApplicationRevisionは、ビルドごとに増加するわけではありません。これは、がVisualStudioから実行された場合にのみ機能します
  • 場合によっては、PublishUrlが使用されません。 MSDNからの引用

    たとえば、PublishURLをFTPパスに設定し、InstallURLをWebURLに設定できます。この場合、PublishURLはファイルを転送するためにIDEでのみ使用され、コマンドラインビルドでは使用されません。最後に、ClickOnceアプリケーションを公開する場合はUpdateUrlを使用できます。インストールされている別の場所から自分自身を更新します。

これを行う特別なMSBuildファイルを作成しました。公開ターゲットを実行し、ファイルを適切な場所にコピーします。

Alhambraeidosによって要求されたビルドファイルの例。基本的に、通常のVisualStudioビルドを実行してから、Click-onceデータを実際のリリースフォルダーにコピーします。プロジェクト固有のものをいくつか削除したので、壊れている可能性があることに注意してください。さらに、ビルド番号は増加しません。それは私たちのContinues-Build-Serverによって行われます:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Publish" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <!-- the folder of the project to build -->
        <ProjLocation>..\YourProjectFolder</ProjLocation>
        <ProjLocationReleaseDir>$(ProjLocation)\bin\Release</ProjLocationReleaseDir>
        <ProjPublishLocation>$(ProjLocationReleaseDir)\app.publish</ProjPublishLocation>
        <!-- This is the web-folder, which provides the artefacts for click-once. After this
         build the project is actually deployed on the server -->
        <DeploymentFolder>D:\server\releases\</DeploymentFolder>
    </PropertyGroup>


    <Target Name="Publish" DependsOnTargets="Clean">
        <Message Text="Publish-Build started for build no $(ApplicationRevision)" />
        <MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Publish"/>   


        <ItemGroup>
            <SchoolPlannerSetupFiles Include="$(ProjPublishLocation)\*.*"/>
            <SchoolPlannerUpdateFiles Include="$(ProjPublishLocation)\Application Files\**\*.*"/>
        </ItemGroup>
        <Copy
            SourceFiles="@(SchoolPlannerSetupFiles)"
            DestinationFolder="$(DeploymentFolder)\"
        />
        <Copy
            SourceFiles="@(SchoolPlannerUpdateFiles)"
            DestinationFolder="$(DeploymentFolder)\Application Files\%(RecursiveDir)"
        />      
        <CallTarget Targets="RestoreLog"/>
    </Target>
    <Target Name="Clean">   
        <Message Text="Clean project:" />
        <MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Clean"/>
    </Target>       
</Project>
15
Gamlor

間違ったプロパティを設定しています。代わりにPublishDirを試してください。

そのままmsBuildに渡すことも、プロジェクトファイル(またはslnファイルもあります。常にプロジェクトファイルを使用するかどうかはわかりません)に設定することもできます。

      <PropertyGroup>
    <PublishDir>C:\Dev\Release\$(BuildEnvironment)\</PublishDir>
  </PropertyGroup>

MsBuildとClickOnce のものについて、いくつかのブログ投稿を行いました。それらが役立つと思われるかどうかを確認してください...

幸運を :-)

38
wallismark

私は2セントを入れます、この構文は(正しいか間違っているか)うまくいくようです:

/p:publishUrl="C:\\_\\Projects\\Samples\\artifacts\\Web\\"
2
Reece Bradley