Я создал очень простой пакет NuGet из проекта .NET Framework Visual Library, где исходный код библиотеки классов находится на С#.
Я использовал эту команду для создания пакета nuget:
nuget pack MyProject.csproj -symbols -Properties "Configuration=Debug" -suffix debug
Который создает, как я ожидаю, два файла пакета nuget, а именно:
Эти пакеты в основном идентичны, за исключением того, что пакет с "символами" включает файлы pdb в иерархии lib и исходные файлы в папке src.
Учитывая дублирование, я переименую файл MyProject.1.0.0-debug.symbols.nupkg
в MyProject.1.0.0-debug.symbols.nupkg
MyProject.1.0.0-debug.nupkg
, который перезаписывает один из файлов, и в этом нет ничего сложного. Теперь у меня есть условно названный пакет с PDB и исходными файлами.
Я развернул это на внутреннем фиде общего ресурса с:
nuget add MyProject.1.0.0-debug.nupkg \\InternalShare\FeedFolder
В совершенно другом проекте и другом решении я теперь использую этот пакет NuGet в Visual Studio с помощью диспетчера пакетов NuGet. Все отлично работает. И код тоже работает отлично, в моем случае я сделал простое консольное приложение, которое использует пару классов в пакете, и я продемонстрировал, что оно использует их правильно и без инцидентов.
Все идет нормально.
Теперь я устанавливаю точку останова в потребляющем коде и пытаюсь войти в исходный код для отладки пакета. Кажется, он работает нормально, но на самом деле он не входит в исходный код, который был распространен вместе с пакетом. Фактически он входит в ОРИГИНАЛЬНЫЙ источник от создания пакета, в совершенно другой и не связанной иерархии папок на моем компьютере.
ХОРОШО. Поэтому теперь я воссоздаю свое простое консольное приложение на отдельном компьютере, который не имеет ОРИГИНАЛЬНОГО источника. И на этом отдельном компьютере, который находится во внутренней сети и, следовательно, имеет доступ к общей папке, я использую пакет NuGet и снова все компилируется и работает нормально.
Однако когда я пытаюсь войти в исходный код пакета в отладчике Visual Studio, он просто не работает. Отладчик не может найти исходный код, даже если он находится прямо в папке пакета. (Отладчик предлагает разобрать код - не очень полезно).
Похоже, что это должен быть общий случай использования и желание включить символы и исходный код в пакет nuget, поэтому я должен делать что-то глупое, чтобы отладчик не мог найти источник.
Различные варианты вещей:
В чем моя ошибка?
Спасибо заранее.
================== ДОБАВЛЕННАЯ ИНФОРМАЦИЯ 17.04.2017, 15:30 Pacific Pacific ==================== ===
Это не так плохо, как я думал. Когда я пытаюсь зайти в код и сказать, что он не может его найти, мне предоставляется возможность просмотреть код, чтобы я мог перейти к пакету (при условии, что я знаю, где он находится!) И освободить отладчик и все отлично работает Приятно то, что Visual Studio, похоже, запоминает, где я находился, и знает, где искать в следующий раз. Не уверен в этом механизме.
И.... Если я иду на свой исходный компьютер (с фактическим источником пакета на нем), если я изменяю этот исходный источник, как будто я готовлюсь к следующему пакету, отладчик (конечно) понимает, что источник изменился и также побуждает меня искать подходящий источник в другом месте.
Тем не менее, было бы замечательно не прыгать через такие обручи, поэтому я буду благодарен за любые дальнейшие идеи.
Некоторые основы:
Следующий:
Некоторая информация о пути записана в вашем .nupkg, поэтому проект, который использует пакет, всегда будет искать исходный путь.
Я воспроизвожу вашу проблему, выполнив ваши действия. (Спасибо за ваши подробности, поскольку на самом деле я не знаком с тем, как создавать пакеты nuget раньше).
Кажется, что-то о пути записано в .nupkg, поэтому механизм отладки будет искать исходный путь даже после того, как я скопирую его на удаленный компьютер, где первоначальный путь не существует, как показано ниже:
The debugger could not locate the source file 'C:\Users\localmachine\source\repos\LibraryForNuget\LibraryForNuget\TestNuget.cs'.
В качестве альтернативного обходного пути нам просто нужно указать отладочному механизму, где найти источник:
Решение Go (где находится консольное приложение) → Свойства → Отладка исходных файлов, затем добавьте каталог, в котором находится файл xx.cs, в "Каталоги, содержащие исходный код".
Я имею в виду каталог, похожий на C:\remoteMachine\xxx\source\repos\CurrentSolutionDir\packages\LibraryForNuget.1.0.0-debug\src
.
Примечание. Я предлагаю вам создать новую консоль для ее тестирования. И, возможно, ссылка на источник предоставит пользователю лучший опыт для отладки.