3

プロジェクトファイルを右クリックしてVisualStudioで実行できるのと同じように、msbuildからWebサービスの展開パッケージをビルドしようとしています。

パッケージは正常に作成され、プロジェクトファイルのソースディレクトリの下にある/ obj / Release/Packagesフォルダーに配置されます。

プロジェクトファイル内のPropertyGroupでPackageLocationプロパティを設定することにより、そのパッケージが作成される場所を指定できるはずです。しかし、それは私にはうまくいきません。それでも、パッケージはソースディレクトリの下の/ obj / Release/Packagesに配置されます。

これが私のプロジェクトファイルからのスニペットです:

  <Import Project="$(SrcTreeRoot)\Build\TaskInit.Tasks" />
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
  <Import Project="$(SrcTreeRoot)\Build\TaskOverrides.Tasks" />
  <PropertyGroup>
    <Platform>Any Cpu</Platform>
    <Configuration>Dev</Configuration>
    <PackageLocation>$(PackageOutputDir)\MatrixOnCdsService\MatrixOnCdsService.zip</PackageLocation>
    <PackageAsSingleFile>True</PackageAsSingleFile>
    <EnablePackageProcessLoggingAndAssert>True</EnablePackageProcessLoggingAndAssert>
    <!--OutDir>$(PackageOutputDir)\MatrixOnCdsService\</OutDir-->
  </PropertyGroup>

また、次のセクションがあるMasterBuild.projを使用しています。

    <PackageProject Include="..\Source\AnalysisSuite\MatrixOnCdsService\MatrixOnCdsService.csproj"/>

..。

<Target Name="Package">
    <MSBuild Projects="@(PackageProject)" Targets="Package" Properties="Platform=$(Platform);
                                                                       Configuration=$(Configuration);
                                                                       DeployOnBuild=true;
                                                                       DeployTarget=Package;
                                                                       PackageLocation=$(PackageLocation);"/>
</Target>

TaskInit.tasksは、パッケージを配置する場所をプロジェクトに指示するために使用するPackageOutputDirプロパティを含む独自のカスタムインポートファイルです。

私の質問は、PackageLocationを指定した後でも、パッケージが/ obj / Release / Packagesフォルダーに配置されているのはなぜですか?

4

2 に答える 2

4

ターゲットにあるプロパティグループを固定します。

<Target Name="SetValues">
  <PropertyGroup>
    <Platform>Any Cpu</Platform>
    <Configuration>Dev</Configuration>
    <PackageLocation>$(PackageOutputDir)\MatrixOnCdsService\MatrixOnCdsService.zip</PackageLocation>
    <PackageAsSingleFile>True</PackageAsSingleFile>
    <EnablePackageProcessLoggingAndAssert>True</EnablePackageProcessLoggingAndAssert>
    <!--OutDir>$(PackageOutputDir)\MatrixOnCdsService\</OutDir-->
  </PropertyGroup>
</Target>

次に、これをパッケージターゲットのDependsOnTargetとして追加すると、値が渡されると思います。

例えば<Target Name="Package" DependsOnTargets="SetValues">

于 2011-08-08T10:16:22.613 に答える
3

MasterBuild.projで次のことを行うことができます。

  <Target Name="Package">
    <ConvertToAbsolutePath Paths="$(PackageOutputDir)">
      <Output TaskParameter="AbsolutePaths" PropertyName="Source_Dir_Abs"/>
    </ConvertToAbsolutePath>
   <MSBuild Projects="@(PackageProject)" Targets="Package"
      properties="Platform=$(Platform);
      Configuration=$(Configuration);
      DeployOnBuild=false;
      DeployTarget=Package;
      PackageLocation=$(Source_Dir_Abs)\$(PackageProjectName).zip;
      PackageAsSingleFile=true;
      ExcludeFilesFromDeployment=Web.config;
      _PackageTempDir=$(PackageOutputDir)\temp;">
  </MSBuild>
  </Target>

msbuildを呼び出す場合は、次のようにして$(PackageProjectName)で使用されるプロパティを追加する必要があります。

msbuild.exe / property:PackageProjectName = $ project

于 2011-08-19T16:16:49.480 に答える