2014-12-02 26 views
0

我想創建一個CoApp包,它只安裝我們部門的定製屬性表(目前它們來自Mercurial子庫,我們希望擺脫儘可能多的子庫)。創建帶有屬性表的CoApp包

的屬性表駐留在幾個目錄:

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

我如何在包中包含我所有的文件並獲取包來配置項目的正確屬性表?

回答

2

我不知道CoApp,但在普通的nuget中,如果你想添加一個屬性表到項目而不是import MSBuild targets and props files into project(不同之處是在構建時它被評估),你可以通過將屬性工作表和以下install.ps1uninstall.ps1腳本在nuget包的工具/目錄中。

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) 
} 

參見https://github.com/blole/visual-studio-builddir/tree/4ccf9bcf2d64d7ce1fd53768a9b5466c033fea46爲一個完整的NuGet包,只有安裝了一個屬性表。