MSBUILD Невозможно принудительно установить PackageLocation для цели Package - PullRequest
3 голосов
/ 05 августа 2011

Я пытаюсь создать пакет развертывания для моего веб-сервиса из msbuild так же, как вы можете сделать это в Visual Studio, щелкнув правой кнопкой мыши файл проекта.

Пакет прекрасно создан и помещен впапка / obj / Release / Packages в моем исходном каталоге для файла проекта.

Вы должны иметь возможность указать, где создается этот пакет, установив свойство PackageLocation в PropertyGroup внутри файла проекта.Однако это не работает для меня.Он по-прежнему помещает пакет в / 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, которое мы используем, чтобы указать проекту, куда поместитьпакет.

Мой вопрос: почему пакет все еще помещается в папку / obj / Release / Packages даже после указания PackageLocation?

Ответы [ 2 ]

4 голосов
/ 08 августа 2011

Укажите группу свойств, которая у вас есть, в качестве цели:

<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">

3 голосов
/ 19 августа 2011

Вы можете сделать следующее в вашем 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 / свойство: PackageProjectName = $ project

...