Wie kann AddUserSecrets() funktionieren, wenn Tags im csproj programmatische Ausdrücke sind?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie kann AddUserSecrets() funktionieren, wenn Tags im csproj programmatische Ausdrücke sind?

Post by Anonymous »

Kontext: Aus Gründen der Klarheit zwischen meinen verschiedenen Projekten und Umgebungen und um meine Geheimnisse (natürlich lokal) versionieren zu können, verwende ich im UserSecrets-Tag meiner csproj-Projektdateien verständliche Namen anstelle klassischer Guids.

Code: Select all

BackOffice-Test
Bisher funktioniert es in allen Szenarien gut, wenn ich diese Art von konstanten Ausdrücken verwende:
  • Ich kann sie mit dem Ad-hoc-Kontextmenü meiner IDE (Visual Studio) bearbeiten
  • Klassisches Debuggen mit VS verwendet die richtigen Geheimnisse
  • Sonderfälle, in denen AddUserSecrets() muss auch explizit in der Codearbeit aufgerufen werden
Aber um langwierige fehleranfällige Deklarationen wie :
zu vermeiden

Code: Select all

Report-Local


Report-Dev


Report-Prod

…
Man könnte versuchen, es mit einem Einzeiler zu vereinfachen, der auf einer ziemlich einfachen Namenskonvention zwischen Projektnamen und Konfigurationsnamen basiert:

Code: Select all

$([System.Text.RegularExpressions.Regex]::Split($(MsBuildProjectName), "\.")[2])-$([System.Text.RegularExpressions.Regex]::Split($(Configuration), "-")[0])
Aber jetzt funktioniert das dritte Szenario, das Aufrufen von AddUSerSecrets() im Code, nicht mehr; möglicherweise, weil $(MsBuildProjectName) und $(Configuration) nicht konfiguriert sind oder der Ausdruck einfach nicht berechnet wird. Es liegt jedoch kein Fehler vor, nur ein No-Op.
Dasselbe Problem bei diesem Ansatz, mit etwas Üblicherem wie der Definition einer Konstante:

Code: Select all

$([System.Text.RegularExpressions.Regex]::Split($(Configuration), "-")[1].ToUpperInvariant())
Es wird in einem Directory.Build.props platziert und fügt eine DEBUG- oder RELEASE-Kompilierungsvariable hinzu.
Aber wenn ich versuche, meine Datenbank mit EF zu aktualisieren (in dem Wissen, dass meine DbContextFactory ein AddUserSecrets() verwendet hat):

Code: Select all

dotnet ef database update --configuration Local-Debug -c DbContext --startup-project source\Company.Web.BackOffice --project source\Company.Svc.DAL
Es schlägt mit dem Fehler fehl:

\Directory.Build.props(16,5): Fehler MSB4184: unmöglich, den Ausdruck „“.GetValue(1)“ auszuwerten. Der Index lag außerhalb der Grenzen des Arrays. [C:\Benutzer\Benutzer\repos\Company\source\Company.Svc.DAL\Company.Svc.DAL.csproj]

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post