MSBUILD无法强制PackageLocation for Package目标

时间:2011-08-05 17:51:15

标签: msbuild msdeploy webdeploy

我正在尝试从msbuild为我的Web服务构建一个部署包,就像在Visual Studio中通过右键单击项目文件一样。

包被创建正常,并放在项目文件的源目录下的/ 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文件夹中?

2 个答案:

答案 0 :(得分: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>

然后将其添加为您的Package Target的DependsOnTarget,我认为您将传递您的值。

e.g。 <Target Name="Package" DependsOnTargets="SetValues">

答案 1 :(得分: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