Как конфигурировать проекты внутри одного решения таким образом, чтобы вспомогательные проекты-библиотеки использовали те же зависимости, что и главный проект?

Как можно настроить проект Core, который является библиотекой с основными сущностями, чтобы он использовал ту же версию библиотеки Windows.Media, что и проект UI, представляющий собой WPF-приложение, избегая при этом необходимости перебирать различные версии файла presentationcore.dll?
  • 5 декабря 2023 г. 4:40
Ответы на вопрос 2
В контексте .NET, для синхронизации зависимостей между проектами в одном решении есть несколько идиоматических подходов:

1. Directory.Build.props:
Вы можете использовать файл `Directory.Build.props`, чтобы определить зависимости один раз в корне вашего репозитория или решения. Этот файл автоматически применяется ко всем проектам в рамках директории и её поддиректорий. В нём можно указать версию библиотеки, и она будет использоваться всеми проектами.

Например, в вашем файле `Directory.Build.props` на корне решения могут быть следующие строки:

```xml
<Project>
  <ItemGroup>
    <PackageReference Include="SomeLibrary" Version="1.0.0" />
  </ItemGroup>
</Project>
```

2. Общий проект:
Создайте проект в решении, который будет содержать общие подключаемые модули (например, зависимости). Затем добавьте этот проект в качестве ссылки во все остальные проекты. Таким образом, все проекты будут использовать один и тот же набор библиотек.

3. NuGet PackageReference:
Установите зависимости с помощью NuGet и используйте одинаковые версии в файлах .csproj проектов. Если у вас есть несколько проектов, которые должны использовать одну и ту же версию библиотеки, вы можете вынести версию в отдельный props файл или использовать `Directory.Build.props` для общего задания версий.

4. Central Package Versions:
Используйте функционал Central Package Version Management (если поддерживается вашей версией MSBuild), который позволяет управлять версиями NuGet пакетов из одного места для всех проектов решения. Это делается с помощью файла `Directory.Packages.props`. Пример использования:

```xml
<Project>
  <ItemGroup>
    <PackageVersion Include="SomeLibrary" Version="1.0.0" />
  </ItemGroup>
</Project>
```

5. Global.json:
В случае, когда используются инструменты и SDK .NET Core, `global.json` может использоваться для указания конкретных версий SDK для всего решения. Но это не применяется к отдельным зависимостям библиотек.

В вашем конкретном случае, для использования одной и той же версии библиотеки `Windows.Media` в проектах Core и UI, рекомендуется использовать подход `PackageReference` с едиными версиями или `Directory.Build.props` для централизованного управления зависимостями.

Что касается конкретной библиотеки `presentationcore.dll` - это не NuGet пакет, а часть платформы .NET Framework или .NET Core (в случае .NET Core его эквивалент). Обычно эти сборки управляются через целевую платформу проекта (Target Framework Moniker, TFM). Убедитесь, что все проекты в вашем решении нацелены на одну и ту же версию платформы (например, .NET Framework 4.7.2 или .NET Core 3.1), тогда они будут использовать одну и ту же системную версию `presentationcore.dll`.
Если ваша Core сборка должна обращаться к UI, то вы явно идете не туда.Если Core предполагает наличие каких-то контроллов, то это явно не задача Core сборки, а какой-то отдельной UI библиотеки для WPF
Похожие вопросы