Я не уверен, полностью ли я понимаю проблему ... вы ищете решение для хранения некоторых глобальных переменных, которые не будут вызывать перекомпиляцию сборок, которые ссылаются на эти глобальные переменные, если вы их измените? Если так, то почему бы не подумать о перестройке вашей архитектуры в соответствии с принципом Inversion of Control ? Подумайте: «Не звоните нам, мы позвоним вам», принцип Голливуда. Если все сборки, которые требуют некоторого const, просто вызывают интерфейс (которым они владеют), который предоставляет свойство со значением, которое им требуется, и тогда у вас есть проект констант, которые реализуют этот интерфейс (путем ссылки на эти проекты и последующей реализации этих интерфейсов) тогда эти проекты никогда не будут нуждаться в перекомпиляции при изменении значения констант.
Я уверен, что вы все равно их знаете, но ознакомились с принципами SOLID , где "D" - это принцип инверсии зависимости (инверсия контроля). Я думаю, учитывая ваши опасения (при условии, что я вас правильно понял), они действительно могут вам помочь.
Пример инверсии управления может быть таким простым:
MyService.dll:
public class MyService
{
// injected dependency
public IMyConstants MyConstants { get; set; }
public MyMethod(){
// get your query...
var query = IMyConstants.Query;
}
}
MyConstants.dll:
public MyConstants : IMyConstants {
// implementation of query property from the myservices.dll interface
public string Query { ... }
}
Таким образом, myconstants.dll ссылается на myservice.dll, а не наоборот (то есть myservices не нуждается в перекомпиляции). Затем загрузочный код (чтобы все это настроить и внедрить зависимости) живет в другом месте.
Извините, если я вас неправильно понял, надеюсь, это поможет!