C# присвоить переменную константе

Я пытаюсь присвоить переменную константе. Да, я понимаю факт и теорию о том, что константе не следует назначать переменную, но вот сценарий ...

Я создал сборку, и мне нужно выполнить проверку версии сборки, так как она может быть подключена к различным приложениям. Я пишу и читаю из файлов 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();

Будем очень признательны за любые идеи или предложения.

Вы упомянули константу в своем вопросе, но вы используете static readonly, а не const, не могли бы вы это изменить? Я бы посоветовал вам использовать статику с частным сеттером. Таким образом, вы можете установить его после получения данных, но вы можете оставить его недоступным для редактирования для «внешнего мира».

H.J. Meijer 02.05.2018 11:14

@ H.J. Meijer: Я думаю, что проблема OP заключается в области атрибутов, которые инициализируются константами.

Stefan 02.05.2018 11:16

Разве это не одна из причин, по которой вы не должны помещать информацию о версиях в пути, пространства имен и / или URL-адреса?

Stefan 02.05.2018 11:17

@Stefan: вы правы, я не могу объявить свой File_Version_Info статическим.

Bazïnga 02.05.2018 11:19

@Stefan, напротив, версии находятся являются частью пространств имен XML. URI пространства имен нет в любом случае совпадает с URL-адресом REST API. Однако управление версиями XML или даже схемы JSON сильно отличается от управления версиями API. Вы можете изменять версию API сколько угодно, пока схема остается прежним. Изменение схемы при существенном изменении API

Panagiotis Kanavos 02.05.2018 11:19

@Stefan: есть ли причина, по которой вы говорите, что я не должен помещать информацию о версиях в пути? Я видел это много раз. Я не спорю с тем, что вы говорите, я просто хочу понять.

Bazïnga 02.05.2018 11:20

@ Bazïnga Вы бы совсем не обрадовались, если бы служба SOAP меняла пространства имен после каждой сборки, нарушая код вашего клиента. пространство имен - это нет URL-адрес, который вы можете изменить в любое время, когда захотите, не заставляя клиентов перекомпилировать и повторно развертывать. Вам следует нет изменить версию схемы, если нет критическое изменение самого XSD.

Panagiotis Kanavos 02.05.2018 11:21

@ Bazïnga: ну, на самом деле, мне самому было интересно. Я знаю, что есть несколько руководящих указаний относительно того, где разместить вашу версию. Я имел в виду путь здесь в более широком смысле, чем путь к файлу. Похоже, что Панайотис действительно кое-что знает о предмете :)

Stefan 02.05.2018 11:27

@PanagiotisKanavos: XML-файл действительно отправляется в веб-службу. Будет ли информация о версии в пространстве имен не определять, следует ли принять пакет или отклонить? Кроме того, я мог бы очень легко установить версию в пространстве имен, жестко закодировав ее, но если схема изменится, следующий человек забудет обновить жестко закодированную информацию о версии, и я пытаюсь этого избежать.

Bazïnga 02.05.2018 11:29

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

Stefan 02.05.2018 11:29

@ Bazïnga вместо того, чтобы избегать, вы Создайте создаете проблему управления версиями для ваших клиентов. Клиентские прокси необходимо перекомпилировать. Вы ошибочно принимаете управление версиями схемы за управление версиями API. Опять же, подумайте, как ваши клиенты отреагируют, если вы сломаете их автоматически сгенерированные прокси каждый раз, когда вы развертывали внутреннее невидимое исправление

Panagiotis Kanavos 02.05.2018 11:58

@PanagiotisKanavos: спасибо; Я предпочел бы иметь отдельный контроль версий моей схемы и API. Когда будут внесены изменения в код, моя версия API изменится, но моя схема не изменится, поэтому версия схемы не должна меняться, поскольку в этом действительно нет необходимости; как вы говорите, это создало бы ненужную головную боль при каждой компиляции. И наоборот; при изменении схемы мой API не обязательно изменится. Я бы предпочел иметь тег версии внутри xml, чтобы указать мою версию API. Спасибо, что разъяснили это, это имеет смысл.

Bazïnga 02.05.2018 12:31

Почему я не проголосовал за это?

Bazïnga 11.06.2018 12:31
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
13
132
0

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