我正在尝试从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文件夹中?
答案 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