0

我想创建一个 CoApp 包,它只会安装我部门的自定义属性表(目前它们来自 Mercurial 子存​​储库,我们希望摆脱尽可能多的子存储库)。

属性表位于几个目录中:

- build
  - bsii.props
  - vc12
    - vc12.props
    - debug32.props
    - debug64.props
    - release32.props
    - release64.props
    - details
      - 32.props
      - 64.props
      - common.props
      - debug.props
      - release.props

主要的属性表是build\bsii.props,它具有根据平台和配置导入其余属性表的条件导入。

为了使包正常工作,我需要它包含所有属性表文件夹结构并将主属性表添加bsii.props到项目中。

我尝试了以下 autopkg 脚本:

nuget {

    nuspec {
        id = foundations.propertysheets;
        version: 4.0.0.0;
        title: Native Property Sheets;
        ...
    };

    files {
        import_props += { 
            #destination = build\native\imports\;
            ..\build\**\*.props; 
        }
    }
}

这确实创建了一个包含所有必需文件的包,但没有为项目配置属性表。

相反,当我使用import_props: ..\build\bsii.props;该包时,它只包含这个单个文件,而且它不会将它安装在项目上,而是由 CoApp 生成的不同的 .props 文件,它没有对我的主要属性表的引用:

<Import Project="..\packages\foundations.propertysheets.4.0.0.0\build\native\foundations.propertysheets.props" Condition="Exists('..\packages\foundations.propertysheets.4.0.0.0\build\native\foundations.propertysheets.props')" />

如何在包中包含我的所有文件并让包在项目中配置正确的属性表?

4

1 回答 1

2

我不了解 CoApp,但在简单的 nuget 中,如果您想向项目添加属性表而不是将 MSBuild 目标和道具文件导入项目(不同之处在于在构建期间评估它的时间),您可以通过将属性表和以下内容install.ps1以及uninstall.ps1脚本放在 nuget 包的 tools/ 目录中。

安装.ps1

param($installPath, $toolsPath, $package, $project)

foreach ($config in $project.Properties.Item("Configurations").Object)
{
    $propertySheet = $config.AddPropertySheet("$toolsPath\bsii.props")
}

卸载.ps1

param($installPath, $toolsPath, $package, $project)

foreach ($config in $project.Properties.Item("Configurations").Object)
{
    $propertySheet = $config.AddPropertySheet("$toolsPath\bsii.props")
    $config.RemovePropertySheet($propertySheet)
}

有关仅安装单个属性表的完整 nuget 包,请参阅https://github.com/blole/visual-studio-builddir/tree/4ccf9bcf2d64d7ce1fd53768a9b5466c033fea46 。

于 2015-11-12T20:02:14.983 回答