代码之家  ›  专栏  ›  技术社区  ›  SteveCinq

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

  •  0
  • SteveCinq  · 技术社区  · 7 年前

    我在一个VB.netvisualstudio2017(.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
    

    我到处找,但找不到是否有一个变量可以作为 %产品名称% (或 %项目名称% 等等)。

    有人能帮我吗?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Anders Abel    7 年前

    我不认为库应该自己决定在哪里存储数据——这是一个应该由调用应用程序拥有的设置。首先,您可以使用库公开的一个简单静态属性,该属性是在启动时由下降的应用程序设置的。

    但是,如果您仍然希望让库解析调用应用程序的名称,则有可能:

    var programName = Assembly.GetEntryAssembly().FullName.Split(',').First()
    
        2
  •  0
  •   SteveCinq    7 年前

    原来我的问题有点过分;我发现我已经在操纵 DefaultAppDataPath 设置,但错误地认为%CommonApplicationData%是实际的环境路径变量。(几年前我写了原始代码。无论如何,这是我的借口。)

    实际上,我正在分析设置并替换 %通用应用数据% 实际情况 CommonApplicationData %产品名称% :

    我把问题留到一边,以防别人也做同样的事。下面是我的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