应用程序/项目名称是否有系统变量?

时间:2019-01-30 04:18:05

标签: .net settings

我在单个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 :(得分:0)

我不认为图书馆应该自行决定将数据存储在何处-这是调用应用程序应拥有的设置。首先,您可以使用由库提供​​的简单静态属性,该属性由启动时下降的应用程序设置。

但是如果您仍然想让库解析调用应用程序的名称,则可以:

var programName = Assembly.GetEntryAssembly().FullName.Split(',').First()

答案 1 :(得分:0)

事实证明,我的问题有点夸张;我发现我已经在操纵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

您显然可以扩展它,例如,要照顾产品版本,不同的路径等。