Nuget Powershell: как добавить нативные зависимости?как добавить файлы в проект внутри папки? - PullRequest
7 голосов
/ 23 марта 2012

Я создаю пакет Nuget с собственными зависимостями. Я поместил их в пакет без проблем, указав дополнительные file записи в файле .nuspec.

Однако я также хочу скопировать их в выходную папку проекта, который будет использовать мой пакет, чтобы можно было найти зависимости во время выполнения.

Моя идея заключается в добавлении собственных зависимостей в проект и установке их BuildAction на CopyToOutputDirectory. Это мне также удалось с помощью сценария PowerShell ниже:

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(<dependency1>)
add_file(<dependency2>)
...
add_file(<dependencyN>)

Пока все хорошо.

Но теперь мой проект полностью загрязнен этими зависимостями.

Есть ли способ добавить файлы в проект с помощью PowerShell и поместить их в папку?
Или есть другой способ достичь того, чего я хочу: добавить собственные зависимости в пакет NuGet и вывести их в папку проекта с помощью моего пакета Nu *? 1017 *

Ответы [ 2 ]

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

Пакет SqlServerCompact сделал нечто подобное, скопировав соответствующие библиотеки в папку bin в событии после сборки.Вот соответствующий код:

Файл: install.ps1

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

. (Join-Path $toolsPath "GetSqlCEPostBuildCmd.ps1")

# Get the current Post Build Event cmd
$currentPostBuildCmd = $project.Properties.Item("PostBuildEvent").Value

# Append our post build command if it's not already there
if (!$currentPostBuildCmd.Contains($SqlCEPostBuildCmd)) {
    $project.Properties.Item("PostBuildEvent").Value += $SqlCEPostBuildCmd
}

Файл: GetSqlCEPostBuildCmd.ps1

$solutionDir = [System.IO.Path]::GetDirectoryName($dte.Solution.FullName) + "\"
$path = $installPath.Replace($solutionDir, "`$(SolutionDir)")

$NativeAssembliesDir = Join-Path $path "NativeBinaries"
$x86 = $(Join-Path $NativeAssembliesDir "x86\*.*")
$x64 = $(Join-Path $NativeAssembliesDir "amd64\*.*")

$SqlCEPostBuildCmd = "
if not exist `"`$(TargetDir)x86`" md `"`$(TargetDir)x86`"
xcopy /s /y `"$x86`" `"`$(TargetDir)x86`"
if not exist `"`$(TargetDir)amd64`" md `"`$(TargetDir)amd64`"
xcopy /s /y `"$x64`" `"`$(TargetDir)amd64`""
2 голосов
/ 27 марта 2012

Я предлагаю вам открыть 4.0.8852.1 версию пакета SqlServerCompact Nuget с Nuget Package Explorer и использовать его в качестве шаблона. У меня это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...