通过Visual Studio Designer确定项目的解决方案文件位置

时间:2014-04-21 18:37:01

标签: c# visual-studio

我们有一个if语句,试图确定特定文件夹的位置。根据我们是在本地运行(调试)还是在客户端的机器上运行(发布),我们会在不同的地方进行查找。

#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)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE。如果文件夹的路径不正确,项目将无法正常运行,并且设计器在尝试加载时崩溃。

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

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

我的问题是,我们如何通过设计人员确定解决方案的路径,以便我们能够正确解析所需文件夹的路径?

1 个答案:

答案 0 :(得分: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()可能就足够了,您不需要通过提供类型来加载整个程序集。