как включить зависимости для связанных проектов в публикацию

#c# #asp.net-core #project #.net-5

Вопрос:

У меня есть решение с двумя проектами .NET5, ProjectA и ProjectB.

ProjectA-это консольное приложение, которое зависит от Microsoft.Расширения.Хостинг, а ProjectB-это ASP.Net 5 приложение, которое ссылается на проект.

При публикации проекта ( dotnet publish с помощью или через Visual Studio) все в порядке. И то и другое ProjectA.exe и связанные с ним подразделения включены. Но если я опубликую ProjectB, я получу только ProjectA.exe. Я не получаю все необходимые DLL-файлы для запуска ProjectA.exe.
Если я начну ProjectA.exe, я получаю следующую ошибку:

 An assembly specified in the application dependencies manifest (ProjectA.deps.json) was not found:
    package: 'Microsoft.Extensions.Configuration', version: '5.0.0'
    path: 'lib/netstandard2.0/Microsoft.Extensions.Configuration.dll'
 

Я пытался включить Microsoft.Расширения.Хостинг непосредственно в ProjectB, но это не работает.

Я также попытался создать консольное приложение ProjectC, которое ссылается на ProjectA, и это работает, как и ожидалось.

Здесь есть пример репо: https://github.com/kalleguld/deps-test

Как мне создать профиль публикации, который позволит мне запускать оба ProjectA.exe и ProjectB.exe?

Комментарии:

1. Привет, я скачал ваш проект с предоставленной вами ссылки на github, и он может хорошо работать в vs. Когда я посещаю localhost:5001/api/string, я могу получить строку результата Hello, StringProvider . Затем я пытаюсь опубликовать ProjectA, все в порядке, затем в следующий раз опубликую ProjectB, тоже все в порядке. Я выбираю опубликовать в папке. Вот как выглядит моя папка публикации: i.stack.imgur.com/qKz28.png Я боюсь, что вам нужно перезапустить vs или перестроить код. Или попробуйте очистить кэш клиента vs. Я имею в виду, что ваш код, по крайней мере, в порядке.

2. Спасибо, что посмотрели. Проблема возникает, когда я публикую ProjectB, а затем запускаю ProjectA.exe внутри опубликованной папки.

3. Спасибо за ваш ответ, означает ли то, что вы сказали run ProjectA.exe inside the publish folder , после публикации ProjectB, и вы дважды щелкаете projectB.exe, в это время проект автоматически запустится, что позволит вам получить Hello, StringProvider при посещении localhost:5001/api/string ? Или что-то еще? На моей стороне, после публикации ProjectB и двойного щелчка projectB.exe, Я могу получить этот строковый ответ при посещении этого URL.

4.Нет, я хочу дважды щелкнуть ProjectA.exe из папки публикации ProjectB. Подобный этому: cd ProjectB dotnet publish cd bin/Debug/net5.0/publish .ProjectA.exe

5. Я могу воспроизвести вашу проблему, но я не могу найти причину и не знаю, как с ней справиться. Извините за это : (

Ответ №1:

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

Затем выполните dotnet publish команду из ProjectA с -o {projectB/pubilish path} параметром, чтобы опубликовать проект по пути публикации проекта B.

Более подробную информацию о dotnet publish команде, пожалуйста, см. по ссылке ниже:

команда публикации в dotnet