Отслеживание источника разных версий локальных зависимостей в программном обеспечении. NET для разных решений - PullRequest
0 голосов
/ 27 февраля 2020

Аналогичный вопрос: msbuild для разных решений

При управлении программным решением чаще всего я нахожусь в такой ситуации.

У меня есть решение для библиотеки, которое построено с целевой структурой, которая может использоваться для нескольких типов проектов (например, у меня есть стандартная библиотека. net, которая может использоваться как в базовом проекте ASP. NET, так и. NET приложение основной консоли).

namespace MyLib
{
    public class Foo
    {
        public string Bar { get; set; }
    }
}

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

using System;

namespace MyConsoleApp
{
    //Here MyLib is used in a console application
    class Program
    {
        static void Main(string[] args)
        {
            var foo = new MyLib.Foo();
            Console.WriteLine("Foo created succesfully!");
        }
    }
}
using Microsoft.AspNetCore.Mvc;

namespace MyWebApp.Controllers
{
    //Here MyLib is used in a .net core web application.
    [ApiController]
    [Route("[controller]")]
    public class FooController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get()
        {
            var foo = new MyLib.Foo();
            return Ok("Foo created succesfully!");
        }
    }
}

Через некоторое время новое свойство должно быть добавлен в класс Foo, чтобы разрешить обработку Fizz

namespace MyLib
{
    public class Foo
    {
        public string Bar { get; set; }

        public string Fizz { get; set; }
    }
}

Однако нам нужно использовать только свойство Fizz внутри нашего консольного приложения.

То, что я использовал для do:

  1. Ссылка MyLib.dll в MyConsoleApp и MyWebApp
  2. Перестроить MyLib. Изменения теперь отражаются везде, независимо от того, нужны они или нет.

Проблемы с этим:

  1. Fizz могут вызвать проблемы внутри MyWebApp , поскольку его там не должно быть.
  2. Я стараюсь отслеживать зависимости при использовании этого метода

В частности, возникает следующая распространенная ошибка:

MyLib ссылается на внешнюю библиотеку

namespace MyLib
{
    public class Foo
    {
        public string Bar { get; set; }

        public string Fizz { get; set; }

        public static Foo CreateFromString(string input) 
        {
            return Newtonsoft.Json.JsonConvert.DeserializeObject<Foo>(input);
        }
    }
}

Зависимость теперь указана в MyLib.deps.json, который генерируется после построения. Проблема заключается в том, что когда я вручную импортирую MyLib, информация о зависимостях теряется.

Это может привести к ошибкам при вызове CreateFromString в проекте, который не ссылается на Newtonsoft.Json

using System;

namespace MyConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var foo = new MyLib.Foo();
            Console.WriteLine("Foo created succesfully!");
            foo = MyLib.Foo.CreateFromString("{}");
            // Throws 'System.IO.FileNotFoundException' 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
        }
    }
}

Исправить это можно: просто создайте локальный репозиторий Nuget и добавьте свой пакет. Таким образом, когда я ссылаюсь MyLib библиотека Newtonsoft.Json указывается в качестве ссылки.

enter image description here

Возвращаясь к исходной проблеме: как я могу сохранить две разные версии MyLib для разных проектов?

На данный момент я создаю две разные версии пакета и ссылки, когда это необходимо.

Проблема с этим и смысл этого Вопрос в том, как отслеживать исходный код, из которого были сгенерированы разные версии пакета.

Мне нужно знать, из какого исходного кода был собран пакет для целей отладки.

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

Есть ли лучший способ сделать это?

TL: DR У меня есть разные версии Пакет, который я создал, как мне отслеживать различные исходные коды, каждый раз создавая новую ветку?

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