如何在设计时获取项目路径

时间:2010-03-11 14:56:19

标签: c# path components design-time

我使用组件(System.ComponentModel.Component),我想获取项目的应用程序路径,以便在其中创建文件。

THX

弗洛里安

10 个答案:

答案 0 :(得分:4)

对我来说似乎唯一有用的工作是获得EnvDTE.DTE(来自您从EditValue()获得的IServiceProvider),即:

EnvDTE.DTE dte = envProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
string dir = Path.GetDirectoryName(dte.Solution.FullName);

当我尝试使用Assembly.GetXAssembly时,我得到了VS在设计时使用的临时路径。

答案 1 :(得分:2)

只需调用定义为

的GetMyPath即可
string GetMyPath([CallerFilePath] string from = null)
{
   return from;
}

答案 2 :(得分:0)

使用AppDomain.CurrentDomain.BaseDirectory。

答案 3 :(得分:0)

这有用吗?

 New Uri(Assembly.GetCallingAssembly().CodeBase).AbsolutePath

(“CallingAssembly”因为你可以把方法放到服务层(程序集)中检索执行路径)

答案 4 :(得分:0)

看看:Project (bin) folder path at compile time?

使用此技术,您可以“构建”(一次),然后使用生成的文件在DesignTime获取项目位置。这将独立于工作空间。

答案 5 :(得分:0)

我认为罗伯特几乎是对的。

这似乎有效:

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

答案 6 :(得分:0)

string solutionpath = Directory.GetParent(Application.ExecutablePath).Parent.Parent.Parent.FullName;

我认为这是最好的解决方案,因为您不必添加任何库,而不是“使用System.IO”:)

答案 7 :(得分:0)

我做了一个简单的测试(就像临时设计一样,我添加了一个字符串属性来保存当前目录值)(我没有描述数据绑定的所有过程。看看我的一些关于设计时间/运行时绑定的帖子)

在主窗口ViewModel类的空构造函数中(专用于设计时间绑定)

public MainWindow_ViewModel():this(null)
{
    dtpath = Directory.GetCurrentDirectory();
    Console.WriteLine("CTor finished");
}

在mainwindow.xaml文件中,我添加了一个文本框来显示结果(不要介意网格行值)

<TextBox Text="{Binding dtpath}" Grid.Row="3"/>

我进入了VS的设计视图(就像弗洛里安的评论所述,但4年之后的价值更新): C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE

enter image description here

答案 8 :(得分:0)

如果您正在谈论WPF设计师,请使用“上下文”属性/类型

<强>详细信息: - 在设计时你有modelItem的实例(我假设它,你知道)如果没有那么你可以在Override实现的Activate方法中实例化它

//在DesignAdorner类

public class DesignAdorner : PrimarySelectionAdornerProvider
{
      protected override void Activate(ModelItem item)
        {
                modelItem = item;
        }
}

现在,您可以使用以下单行代码访问当前的应用程序路径

string aplicationPathDir = System.IO.Directory.GetParent(modelItem.Context.ToString()).FullName;

如果它对您没有帮助,请告诉我。

答案 9 :(得分:0)

添加对.netFrameWork 4.5程序集中的envdte80的引用。

__init__