Значение, возвращаемое из Assembly.GetExecutingAssembly().CodeBase
, не всегда соответствует ожидаемому, и поэтому оно не будет соответствовать регулярному выражению, в результате чего будет пустая строка.
Assembly.GetExecutingAssembly
разрешает сборку, котораясодержит код, выполняемый в данный момент, который здесь является сборкой WildHare.
При разработке приложения .NET Core
любые сборки, на которые ссылается NuGet packages
, не копируются в папку bin
.
Это означает, что сборка WildHare разрешается из папки NuGet packages
, имеющей кодовую базу, например, например.file:///C:/Users/you/.nuget/packages/wildhare/0.9.8.3/lib/netstandard2.0/WildHare.dll
Этот путь не соответствует регулярному выражению, в результате чего получается пустая строка.
При создании приложения Full .NET Framework
(например, 4.7.1) все сборки копируются впапка bin
, что приводит к совпадению с регулярным выражением.
При наличии встроенного кода в основной сборке путь к базе кода, конечно, будет включать папку bin
и будет передавать регулярное выражение.
Используйте Assembly.GetEntryAssembly
вместо Assembly.GetExecutingAssembly
, так как Assembly.GetCallingAssembly
возвращает сборку, являющуюся исполняемым файлом процесса в домене приложения по умолчанию, или первый исполняемый файл, который был выполнен, , который являетсяВаше основное приложение .
Примечание: обратите внимание, что из-за совпадения регулярного выражения в вашей реализации, GetApplicationRoot
будет действовать только в том случае, если приложение выполняется из папки bin
, что будет очень маловероятно после публикации заявки.Либо ослабьте, либо уберите это ограничение.