Существует ли системная переменная для имени приложения / проекта? - PullRequest
0 голосов
/ 30 января 2019

У меня есть общая библиотека кода между двумя проектами в одном решении VB.NET Visual Studio 2017 (.NET 4.5.2), которое должно сохранять параметры проекта в разных местах.

В моем Common.My.Settings, У меня есть несколько Application настроек, таких как:

DefaultAppDataPath = %CommonApplicationData%MyCompanyName\MyProductName\AppData.dat

Что я хотел бы (что-то вроде):

DefaultAppDataPath = %CommonApplicationData%MyCompanyName%ProductName%AppData.dat

Это означает, что мне не нужно явно устанавливатьпуть;настройки будут просто сохранены в (скажем)

C:\Program Data\MyCompanyName\ThisProductName\AppData.dat

или

C:\Program Data\MyCompanyName\ThatProductName\AppData.dat

Я искал максимум и минимум, но я не могу узнать, есть ли переменная, которая будетдействовать как % ProductName% (или % ProjectName% и т. д.).

Может ли кто-нибудь помочь мне?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Оказывается, мой вопрос был немного вороватым;Я обнаружил, что уже манипулировал настройкой DefaultAppDataPath, но ошибочно подумал, что% CommonApplicationData% - это фактическая переменная пути к среде.(Я написал оригинальный код несколько лет назад. В любом случае, это мое оправдание.)

На самом деле, я анализировал настройку и заменял % CommonApplicationData% на фактическую CommonApplicationData среду.значение.Поэтому я просто расширил это для работы с % ProductName% :

Я оставлю вопрос на тот случай, если кому-то еще понадобится сделать то же самое.А вот мой код VB.NET:

        _defaultAppDataPath = My.Settings.DefaultAppDataPath
        If _defaultAppDataPath.Contains("%"c) Then
            Dim sSections As String() = _defaultAppDataPath.Split({"%"c}, StringSplitOptions.RemoveEmptyEntries)
            If sSections.Count > 0 Then
                sSections(0) = Environment.GetFolderPath(CType([Enum].Parse(GetType(Environment.SpecialFolder), sSections(0)), Environment.SpecialFolder))
                If sSections.Count > 1 Then sSections(2) = gsProductName
                _defaultAppDataPath = Path.Combine(sSections)
            End If
        End If

Очевидно, вы можете расширить его, если хотите позаботиться, скажем, о версиях продукта, различных путях и т. Д.

0 голосов
/ 30 января 2019

Я не думаю, что библиотека должна принимать решения о том, где хранить сами данные - это параметр, который должен принадлежать вызывающему приложению.Для начала вы можете использовать простое статическое свойство, предоставляемое библиотекой, которое задается падающим приложением при запуске.

Но если вы все же хотите позволить библиотеке разрешать имя вызывающего приложения, это возможно:

var programName = Assembly.GetEntryAssembly().FullName.Split(',').First()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...