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

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

谢谢

弗洛里安

对我来说似乎唯一有用的工作是获取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在设计时使用的临时路径。

只需调用定义为的GetMyPath即可

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

使用AppDomain.CurrentDomain.BaseDirectory。

这有用吗?

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

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

看一下: 编译时的Project(bin)文件夹路径?

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

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

这似乎有效:

 Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 
 string solutionpath = Directory.GetParent(Application.ExecutablePath).Parent.Parent.Parent.FullName; 

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

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

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

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

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

  

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

在此处输入图像描述

如果您正在谈论WPF设计器,请使用“Context”属性/类型

细节: –在设计时你有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; 

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