Отсутствует ссылка на сборку - убедитесь, что VS создает файл .config для моего пакета nuget

Я создал пакет nuget, включающий только 1 .dll.

Чтобы проверить установку .nupkg, я

  • создать консольное приложение С# в VS
  • добавить локальный канал, указывающий на каталог моего пакета
  • установить мой пакет оттуда
  • начните вводить main...

Проблема в том, что если я сделаю это:

using System;
using MyNamespace;

namespace tester
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass.MyStaticMethod()

            Console.WriteLine("Hello World!");
        }
    }
}

строка MyClass.MyStaticMethod() говорит, что мне не хватает ссылки на сборку, а using MyNamespace; является ненужным объявлением.

При чтении кажется, что это связано с тем, что мой пакет nuget устанавливается в расположение глобальных пакетов: %Current_User%.nuget.\packages, а файл .csproj включает:

  <ItemGroup>
    <PackageReference Include="MyPackage" Version="1.0.0" />
  </ItemGroup>

Есть ли способ гарантировать, что все потребители моего пакета создадут файл packages.config, а не установят мой пакет в глобальном расположении пакетов?

Могу ли я указать это где-нибудь в файле .nuspec?


person Stuart    schedule 21.10.2020    source источник


Ответы (1)


Способ packages.config — это в основном классический (читай: старый) способ ссылки на пакеты NuGet, и с тех пор он был заменен способом ссылки на пакеты PackageReference. Вы должны убедиться, что ваш пакет совместим с PackageReference.

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

Либо увеличьте версию, либо очистите локальный кеш пакетов NuGet, используя dotnet nuget locals clear all.

Если на DLL по-прежнему нет ссылок (проверьте узел зависимостей, который VS показывает вам в обозревателе решений), ваш пакет может не содержать DLL в ожидаемом месте (например, в папке lib\netstandard2.0, если ваш исходный проект был библиотекой .NET Standard 2.0). )

person Martin Ullrich    schedule 21.10.2020
comment
Привет Мартин, спасибо за ответ. Я вижу .dll под узлом зависимостей в VS и могу вызывать из него методы, но я всегда должен записывать пространство имен — операторы использования не распознаются. - person Stuart; 22.10.2020