.net Core преобразовывает файл csproj в объект

Проблема: мы можем анализировать файл csproj некоторыми способами, но большая часть информации отсутствует в файле, но либо по умолчанию, либо зависит от других свойств.

Я хочу работать с файлами и решением csproj - получать зависимости проекта, свойства и элементы (такие как TargetFramework, скомпилированные файлы ...)

TargetFramework может быть тегом со значением или тегом TargetFrameworks с несколькими значениями, которые анализируются в TargetFramework.

Старое решение - MSBuild предоставляет библиотека microsoft.build.evaluation для работы с файлом csproj, но эта библиотека скомпилирована в net471 и вызывает ошибки, когда мы используем ее в netcoreapp.

Каким будет решение для проблема в основных проектах .net?

На данный момент довольно сложно ответить на этот вопрос, поскольку мы не знаем, чего вы пытаетесь достичь. Какая здесь цель больше? Существуют различные пакеты, такие как Microsoft.Build, Microsoft.Build.Framework и т. д., Но мы не узнаем, будут ли они вам полезны, если не будем знать, чего вы пытаетесь достичь.

Jon Skeet 17.12.2018 08:10

@JonSkeet Отредактировано. По поводу Microsoft.Build, Microsoft.Build.Framework, как я уже сказал, он компилировался только в net471.

baruchiro 17.12.2018 09:07

Что ж, вы сказали о Microsoft.Build.Evaluation - я предполагал, что это пакет NuGet, хотя я не могу найти его на nuget.org. И Microsoft.Build, и Microsoft.Build.Framework включают цели netstandard2.0, поэтому с netcoreapp2.0 все в порядке.

Jon Skeet 17.12.2018 09:16

Вы правы, но я не могу найти объект, представляющий файлы csproj в Microsoft.Build или Microsoft.Build.Framework

baruchiro 17.12.2018 09:34

Если вам нравится идти по маршруту на основе Roslyn, я думаю, что Microsoft.CodeAnalysis.Workspaces.MSBuild может быть тем, что вам нужно. Вы также можете посмотреть на github.com/KirillOsenkov/MSBuildStructuredLog полный пример рабочего кода.

Jon Skeet 17.12.2018 09:41

Есть также такие проекты, как Buildalyzer, которые абстрагируют большую часть конфигурации, необходимой для правильной работы пакетов Microsoft.Build.* на каждой платформе, но я не могу сказать, могут ли эти функции вам помочь ..

Martin Ullrich 18.12.2018 06:32

@Martin Спасибо, я оставил проблему в этом проекте.

baruchiro 18.12.2018 11:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
7
1 288
1

Ответы 1

Для .Net Core Microsoft.Build пакет NuGet работает следующим образом:

var projectRootElement = ProjectRootElement.Open(csprojPath);
projectRootElement.AddProperty("Version", "3.4.5");
projectRootElement.Save();

Если версия существует, она отменяет ее. Если не существует, добавляет новое свойство с именем «Версия» и значением «3.4.5».

Также вы можете получить все свойства, определенные в .csproj.

var projectRootElement = ProjectRootElement.Open(csprojPath);
foreach (var property in projectRootElement.Properties)
{
    Console.WriteLine($"Name: {property.Name} - Value: {property.Value}");
}

Протестировано в .NetCore 5.0

Другие вопросы по теме