我在单个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%等) )。
有人可以帮我吗?
答案 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
您显然可以扩展它,例如,要照顾产品版本,不同的路径等。