Подтвердить что ты не робот

Создайте пакет NuGet, который устанавливает ссылки с Copy Local, установленным на false

Есть ли способ создать пакет NuGet, где, когда пакет установлен в проект, он добавляет ссылки на DLL с "Скопировать локальную" на false?

Я предполагаю, что это будет какой-то script в файле 'install.ps1'.

4b9b3361

Ответ 1

Да, вы можете сделать это с помощью install.ps1, как вы уже догадались.

Вот пример install.ps1, который будет переворачивать флаг в System.dll каждый раз при его запуске. Вы должны иметь представление о том, как сделать то, что вы хотите, используя этот пример:

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

foreach ($reference in $project.Object.References)
{
    if($reference.Name -eq "System")
    {
        if($reference.CopyLocal -eq $true)
        {
            $reference.CopyLocal = $false;
        }
        else
        {
            $reference.CopyLocal = $true;
        }
    }
}

Но эта документация MSDN должна помочь.

Ответ 2

Я думаю, что этот install.ps1 делает то, о чем вы просите - всем DLL, добавленным пакетом, присваивается значение Локальное копирование false. Обратите внимание, что здесь я ничего не делаю с списком AssemblyReferences, кроме как получать из него все имена - вам может понадобиться сделать что-то еще, если вам нужны условия на основе целевой структуры и т.д.

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

$asms = $package.AssemblyReferences | %{$_.Name}

foreach ($reference in $project.Object.References)
{
    if ($asms -contains $reference.Name + ".dll")
    {
        $reference.CopyLocal = $false;
    }
}