Я пытаюсь присвоить переменную константе. Да, я понимаю факт и теорию о том, что константе не следует назначать переменную, но вот сценарий ...
Я создал сборку, и мне нужно выполнить проверку версии сборки, так как она может быть подключена к различным приложениям. Я пишу и читаю из файлов XML, и версия вредна, так как сборка со временем будет развиваться, и я не хочу жестко кодировать; где-то по ходу дела кто-то БУДЕТ это делать. Имея это в виду, XML может (будет) измениться, и я не хочу перезаписывать предыдущие версии XML и не хочу читать файлы XML из предыдущих версий; информация о предыдущей версии должна оставаться в силе; потому что приложение можно обновить в любое время.
Я получаю информацию о версии файла;
private static readonly FileVersionInfo File_Version_Info = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
Когда я пишу свой XML, я включаю свои собственные пространства имен, которые должны включать текущую версию, но, как я уже сказал, он будет принимать только константу;
[DataContract(Name = "name", Namespace = "https://www.my_namespace/v" + **Need_To_Add_Version_As_String_Here**, IsReference = false)]
Я не могу, например, использовать;
File_Version_Info.FileMajorPart.ToString();
Будем очень признательны за любые идеи или предложения.
@ H.J. Meijer: Я думаю, что проблема OP заключается в области атрибутов, которые инициализируются константами.
Разве это не одна из причин, по которой вы не должны помещать информацию о версиях в пути, пространства имен и / или URL-адреса?
@Stefan: вы правы, я не могу объявить свой File_Version_Info статическим.
@Stefan, напротив, версии находятся являются частью пространств имен XML. URI пространства имен нет в любом случае совпадает с URL-адресом REST API. Однако управление версиями XML или даже схемы JSON сильно отличается от управления версиями API. Вы можете изменять версию API сколько угодно, пока схема остается прежним. Изменение схемы при существенном изменении API
@Stefan: есть ли причина, по которой вы говорите, что я не должен помещать информацию о версиях в пути? Я видел это много раз. Я не спорю с тем, что вы говорите, я просто хочу понять.
@ Bazïnga Вы бы совсем не обрадовались, если бы служба SOAP меняла пространства имен после каждой сборки, нарушая код вашего клиента. пространство имен - это нет URL-адрес, который вы можете изменить в любое время, когда захотите, не заставляя клиентов перекомпилировать и повторно развертывать. Вам следует нет изменить версию схемы, если нет критическое изменение самого XSD.
@ Bazïnga: ну, на самом деле, мне самому было интересно. Я знаю, что есть несколько руководящих указаний относительно того, где разместить вашу версию. Я имел в виду путь здесь в более широком смысле, чем путь к файлу. Похоже, что Панайотис действительно кое-что знает о предмете :)
@PanagiotisKanavos: XML-файл действительно отправляется в веб-службу. Будет ли информация о версии в пространстве имен не определять, следует ли принять пакет или отклонить? Кроме того, я мог бы очень легко установить версию в пространстве имен, жестко закодировав ее, но если схема изменится, следующий человек забудет обновить жестко закодированную информацию о версии, и я пытаюсь этого избежать.
Итак, я буду голосовать, поскольку вопрос на самом деле шире, чем этот конкретный вариант использования. Может быть, ты сможешь отразить это в своем вопросе
@ Bazïnga вместо того, чтобы избегать, вы Создайте создаете проблему управления версиями для ваших клиентов. Клиентские прокси необходимо перекомпилировать. Вы ошибочно принимаете управление версиями схемы за управление версиями API. Опять же, подумайте, как ваши клиенты отреагируют, если вы сломаете их автоматически сгенерированные прокси каждый раз, когда вы развертывали внутреннее невидимое исправление
@PanagiotisKanavos: спасибо; Я предпочел бы иметь отдельный контроль версий моей схемы и API. Когда будут внесены изменения в код, моя версия API изменится, но моя схема не изменится, поэтому версия схемы не должна меняться, поскольку в этом действительно нет необходимости; как вы говорите, это создало бы ненужную головную боль при каждой компиляции. И наоборот; при изменении схемы мой API не обязательно изменится. Я бы предпочел иметь тег версии внутри xml, чтобы указать мою версию API. Спасибо, что разъяснили это, это имеет смысл.
Почему я не проголосовал за это?
Вы упомянули константу в своем вопросе, но вы используете
static readonly
, а неconst
, не могли бы вы это изменить? Я бы посоветовал вам использовать статику с частным сеттером. Таким образом, вы можете установить его после получения данных, но вы можете оставить его недоступным для редактирования для «внешнего мира».