5

当我尝试使用 msbuild 创建一个用于 web 部署的包时,它只包含项目 dll。包 zip 文件或临时目录不包含引用项目的 dll。

我看过这篇文章,这不是我的问题。我肯定会使用我正在为其创建部署包的主项目中引用的项目中的代码。

我正在使用 MSBUILD 4 创建包。

当我使用 VS2010 使用完全相同的项目文件创建包时,它工作正常。所有引用的项目的 dll 都包含在 package.zip 文件中。

我尝试更改 _PackageTempDir 的位置,但这也没有解决问题。

我尝试取出 ExcludeFilesFromDeployment 属性并将 PackageAsSingleFile 设置设置为 false 以查看这是否会改变结果。

这是我的 Package 目标。所有的正则表达式都是为了让我可以将我的项目文件名从搜索路径的末尾拉出来,然后使用该名称作为输出文件夹的名称和 zip 文件的名称。PackageOutputDir 是我正在导入的属性。

  <Target Name="Package">
    <MSBuild Projects="@(PackageProject)" Targets="Package" Properties="Platform=$(Platform);
                                                                           Configuration=$(Configuration);
                                                                           DeployOnBuild=true;
                                                                           DeployTarget=Package;
                                       PackageLocation=$(PackageOutputDir)\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2])\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2]).zip;
                                       PackageAsSingleFile=true;
                                       ExcludeFilesFromDeployment=Web.config;
                                       _PackageTempDir=$(PackageOutputDir)\temp;">
    </MSBuild>
  </Target>

关于为什么它不包括我引用的项目 dll 的任何想法?

4

1 回答 1

5

您可以在 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-19T17:11:12.230 回答