Как я могу написать Nuspec для файла плагинов MEF - PullRequest
0 голосов
/ 18 марта 2012

Я хочу написать nuspec для плагина MEF. Я могу скопировать xxx.dll в каталог содержимого, как показано ниже.

<files>
  <file src="Alhambra\bin\Release\Plugins\Alhambra.Plugin.SqlServer.dll" target="content\Plugins\Alhambra.Plugin.SqlServer.dll" />
  <file src="Alhambra\bin\Release\Alhambra.dll" target="lib\Alhambra.dll" />
</files>

но я не могу установить свойство файла в пользовательском проекте для копирования выходного каталога.

Спасибо за любые предложения или фрагменты кода.

1 Ответ

0 голосов
/ 23 марта 2012

Мой подход заключается в добавлении плагина к проекту в виде отдельного файла.Для этого вам понадобится скрипт установки (см. Документация NuGet для этого ).

Мое решение для этого - следующий скрипт:

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

Function add_file($file)
{
    $do_add = 1
    foreach($item in $project.DTE.ActiveSolutionProjects[0].ProjectItems)
    {
        if ($item -eq $file)
        { $do_add = 0 }
    }
    if ($do_add -eq 1)
    {
        $added = $project.DTE.ItemOperations.AddExistingItem($file)
        $added.Properties.Item("CopyToOutputDirectory").Value = 2
        $added.Properties.Item("BuildAction").Value = 0        
    }
}
add_file(<file1>)
add_file(<file2>)

Конечно, когда пользовательУдалите пакет, вам нужно очистить:

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

Function remove_file($file)
{
    foreach($item in $project.DTE.ActiveSolutionProjects[0].ProjectItems)
    {
        if ($item.Name -eq $file)
        { 
          $item.Delete() 
        }
    }
}
remove_file(<file1>)
remove_file(<file2>)
...