使用属性表创建CoApp包

时间:2014-12-02 14:08:55

标签: nuget propertysheet nuget-spec vsprops

我想创建一个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文件,它不是&#39 ; t引用我的主要属性表:

<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')" />

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

1 个答案:

答案 0 :(得分:2)

我不知道CoApp,但是在简单的nuget中,如果你想在项目中添加一个属性表而不是import MSBuild targets and props files into project(不同之处在于它在构建过程中的评估时间),你可以通过将属性表和以下install.ps1uninstall.ps1脚本放在nuget包的tools /目录中。

install.ps1

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

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

uninstall.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