Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 是否访问Visual Studio属性网格中的项目文件结构?_Visual Studio_Components_Projects And Solutions_Designer_Propertygrid - Fatal编程技术网

Visual studio 是否访问Visual Studio属性网格中的项目文件结构?

Visual studio 是否访问Visual Studio属性网格中的项目文件结构?,visual-studio,components,projects-and-solutions,designer,propertygrid,Visual Studio,Components,Projects And Solutions,Designer,Propertygrid,我正在制作一个将在VS拖放设计器中使用的组件。此组件上的属性之一需要是项目中文件的包URI 我想让事情变得简单一点,在PropertyGrid用于我类型的属性的属性编辑器中,检查解决方案,构造URI,并将它们呈现给用户选择 这可能吗?如果是这样的话,我能得到一些关于如何进行这项工作的建议和初学者的建议吗?这是一个仅用于WPF项目的组件吗?那你就走运了。这是一篇评论。或者这个MSDN样本可能会有所帮助我想这方面有一些建议 1) 您可以为属性创建自己的类型编辑器,以决定如何使用属性网格向用户显示属性

我正在制作一个将在VS拖放设计器中使用的组件。此组件上的属性之一需要是项目中文件的包URI

我想让事情变得简单一点,在PropertyGrid用于我类型的属性的属性编辑器中,检查解决方案,构造URI,并将它们呈现给用户选择


这可能吗?如果是这样的话,我能得到一些关于如何进行这项工作的建议和初学者的建议吗?

这是一个仅用于WPF项目的组件吗?那你就走运了。这是一篇评论。或者这个MSDN样本可能会有所帮助

我想这方面有一些建议

1) 您可以为属性创建自己的类型编辑器,以决定如何使用属性网格向用户显示属性值

为此,您需要创建一个从UITypeEditor继承的类型编辑器,如下所示

public class UriListUIEditor : UITypeEditor
{
       //Override a couple of methods
}
看看这篇codeproject文章,看看一个简单的例子

现在,提供属性的EditorType属性,如

   [Editor(typeof(Utils. UriListUIEditor ), 
             typeof(System.Drawing.Design.UITypeEditor))]
    public string Uri 
             { get;set;
             }
2) 要在项目中迭代解决方案,请获取当前DTE实例

 var dte = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal. GetActiveObject("VisualStudio.DTE.8.0"); 
并遍历所有项目以构建列表或URI或任何内容。理想情况下,您可以在上述UriListUIEditor的EditValue方法中执行此操作

  foreach (var project in dte.Solution.Projects)
        {

        }

希望这有帮助

不。这是最简单的部分。困难的部分是从属性网格编辑器中与VisualStudio项目系统交互。不错,你看过DTE了吗?你使用VB、C语言还是C++?对于C#你要做的就是保护环境。使用EnvDTE80;//或EnvDTE90或EnvDTE,具体取决于您的目标visual studio。//获取当前运行的Visual Studio IDE的实例。对于8.0版本EnvDTE80 dte=(EnvDTE80.DTE2)System.Runtime.InteropServices.Marshall。GetActiveObject(“VisualStudio.DTE.8.0”);不。好像你知道一些关于它的事情。。。编写一些代码以获取活动项目中的文件。那会很有帮助的!以下是您应该研究的资源:VisualStudioAutomation对象模型图表的自动化和可扩展性定制和自动化开发环境不幸的是,这方面存在一些问题。首先,GetActiveObject从ROT中拦截第一个VS,这意味着它可能是您正在运行的VS的任何实例之一。你必须经历这一过程,得到你所需要的。第二,一旦你有了DTE,你可以很好地枚举东西,直到你真正尝试从属性中获取一个值,这会抛出一个SerializableException。我最终做了类似的事情,只是我必须使用运行的对象表来确定要使用哪个VS实例。谢谢你的帮助。我后悔现在把它变成了维基;我不能回过头来接受这个答案。