如何在类库(没有Application对象)中构建Application.UserAppDataPath?

时间:2009-11-15 07:29:01

标签: c# .net

Winforms和控制台应用程序可以使用Application.UserAppDataPath。 如果我想从dll构建相同的路径怎么办?我怎样才能做到这一点? 我知道Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)将是开始......

3 个答案:

答案 0 :(得分:1)

这是一种可以做你想要的方法。这适用于WPF应用程序,无需添加System.Windows.Forms.dll

public string GetUserAppDataPath()
{
  string path = string.Empty;
  System.Reflection.Assembly assm;

  try
  {
    assm = System.Reflection.Assembly.GetEntryAssembly();
    Type at = typeof(System.Reflection.AssemblyCompanyAttribute);
    object[] r = assm.GetCustomAttributes(at, false);
    System.Reflection.AssemblyCompanyAttribute ct = ((System.Reflection.AssemblyCompanyAttribute)(r[0]));

    path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    path += @"\" + ct.Company;
    path += @"\" + assm.GetName().Version.ToString();
  }
  catch 
  {        
  }

  return path;
}

答案 1 :(得分:0)

好吧,如果你没有可以使用的应用程序对象,你可以从你提到的内容开始获取“Ap​​plicationData”文件夹路径,然后将默认文件夹结构附加到该路径上。

公司名称/产品名称

是默认的附加项目

答案 2 :(得分:0)

您可以使用DLL中的Application.UserAppDataPath - 只需从DLL项目添加对System.Windows.Forms程序集的引用。

但请注意,如果您的DLL在Windows服务或服务器应用程序(如ASP.NET)中使用,则它可能在没有配置文件的服务帐户下运行 - 在这种情况下,UserAppDataPath将不存在。这可能是Application类在System.Windows.Forms命名空间中的主要原因。