Как заставить работать AddUserSecrets(), когда теги в csproj являются программными выражениями?C#

Место общения программистов C#
Ответить
Anonymous
 Как заставить работать AddUserSecrets(), когда теги в csproj являются программными выражениями?

Сообщение Anonymous »

Контекст: для ясности между моими различными проектами и средами, а также для возможности управления версиями (конечно, локально) моих секретов, я использую понятные имена вместо классических руководств в теге UserSecrets моих файлов проекта csproj.

Код: Выделить всё

BackOffice-Test
Пока что он отлично работает во всех сценариях, если я использую такие константные выражения:
  • Я могу редактировать их с помощью специального контекстного меню моей IDE (Visual Studio).
  • Классическая отладка с помощью VS использует правильные секреты.
  • Особые случаи, когда AddUserSecrets() также должен вызываться явно в коде
Но во избежание утомительных, подверженных ошибкам объявлений, таких как:

Код: Выделить всё

Report-Local


Report-Dev


Report-Prod

…
Можно попытаться упростить его с помощью однострочника, основанного на довольно простом соглашении об именах между именами проектов и именами конфигураций:

Код: Выделить всё

$([System.Text.RegularExpressions.Regex]::Split($(MsBuildProjectName), "\.")[2])-$([System.Text.RegularExpressions.Regex]::Split($(Configuration), "-")[0])
Но теперь третий сценарий, вызывающий AddUSerSecrets() в коде, больше не работает; возможно, потому, что $(MsBuildProjectName) и $(Configuration) не настроены или выражение просто не вычисляется. Однако ошибки нет, просто нет операции.
Та же проблема и с этим подходом, но с чем-то более обычным, например с определением константы:

Код: Выделить всё

$([System.Text.RegularExpressions.Regex]::Split($(Configuration), "-")[1].ToUpperInvariant())
Он помещается в Directory.Build.props и добавляет переменную компиляции DEBUG или RELEASE.
Но при попытке обновить мою базу данных с помощью EF (зная, что моя DbContextFactory использовала AddUserSecrets()):

Код: Выделить всё

dotnet ef database update --configuration Local-Debug -c DbContext --startup-project source\Company.Web.BackOffice --project source\Company.Svc.DAL
Ошибка:

\Directory.Build.props(16,5): ошибка MSB4184: невозможно оценить выражение "".GetValue(1)". Индекс находился за пределами массива. [C:\Users\User\repos\Company\source\Company.Svc.DAL\Company.Svc.DAL.csproj]


Подробнее здесь: https://stackoverflow.com/questions/797 ... atic-expre
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»