2014-04-21 40 views
0

我们有一个if语句来尝试确定特定文件夹的位置。根据我们是在本地运行(调试)还是在客户端机器上(发行版),我们会在不同的地方寻找它。通过Visual Studio Designer确定项目的解决方案文件位置

#if (DEBUG) 
     firefoxPath = @"..\..\..\Includes\XulRunner\"; 
#else 
     if (System.Diagnostics.Debugger.IsAttached) { 
      firefoxPath = @"..\..\..\Includes\XulRunner\"; 
     } 
     else { 
      firefoxPath = Path.Combine(Application.StartupPath, @"XulRunner\"); 
     } 
#endif 

然而,当我们试图运行引用这一个项目的设计,它是无法化解的路径,作为设计师的工作目录是: C:\ Program Files文件(x86)的\微软Visual Studio 12.0 \ Common7 \ IDE。如果文件夹路径不正确,项目将无法正确运行,并且设计器在尝试加载时会崩溃。

我们可以用它来确定我们是否正在通过设计师执行:

bool isInDesignMode = LicenseManager.UsageMode == LicenseUsageMode.Designtime || System.Diagnostics.Debugger.IsAttached == true; 

我的问题是,我们如何确定的路径,通过设计师的解决方案,使我们能正确解析我们需要的文件夹的路径?

+0

为什么不把这个值放在web.config中作为关键字,并使用transform在不同的环境中进行更改? – thsorens

+0

我们无法知道项目文件的静态位置,因为这是由几个人开发的,每个人都可以通过各种途径获得解决方案 – user2312903

回答

0

你总是可以得到整个项目内的一些组件的情况下,访问Assembly.CodeBase属性和它玩:

string assemblyPath = new Uri(Assembly.GetAssembly(typeof(SomeTypeWithinYourProject)).CodeBase).AbsolutePath; 

// At least you've the Bin\Debug or Bin\Release. Now you can assume some conventions 
// and get project's directory. 
string binDir = Path.GetDirectoryName(binDir); 

我不知道您的具体情况,但也许Assembly.GetExecutingAssembly()可能是够了,您不需要通过提供类型来加载整个组件。

相关问题