Аналогичный вопрос: 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:
- Ссылка
MyLib.dll
в MyConsoleApp
и MyWebApp
- Перестроить
MyLib
. Изменения теперь отражаются везде, независимо от того, нужны они или нет.
Проблемы с этим:
Fizz
могут вызвать проблемы внутри MyWebApp
, поскольку его там не должно быть. - Я стараюсь отслеживать зависимости при использовании этого метода
В частности, возникает следующая распространенная ошибка:
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
указывается в качестве ссылки.
Возвращаясь к исходной проблеме: как я могу сохранить две разные версии MyLib
для разных проектов?
На данный момент я создаю две разные версии пакета и ссылки, когда это необходимо.
Проблема с этим и смысл этого Вопрос в том, как отслеживать исходный код, из которого были сгенерированы разные версии пакета.
Мне нужно знать, из какого исходного кода был собран пакет для целей отладки.
Правильно теперь я создаю ветку для каждой отдельной версии, но я боюсь, что это должно быть слишком громоздко.
Есть ли лучший способ сделать это?
TL: DR У меня есть разные версии Пакет, который я создал, как мне отслеживать различные исходные коды, каждый раз создавая новую ветку?