Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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
C# Visual Studio 2017 VSIX扩展中的Configuration.Properties对象返回null_C#_Visual Studio 2015_Visual Studio 2017_Visual Studio Extensions - Fatal编程技术网

C# Visual Studio 2017 VSIX扩展中的Configuration.Properties对象返回null

C# Visual Studio 2017 VSIX扩展中的Configuration.Properties对象返回null,c#,visual-studio-2015,visual-studio-2017,visual-studio-extensions,C#,Visual Studio 2015,Visual Studio 2017,Visual Studio Extensions,我使用VSIX项目模板为Visual Studio 2015构建了一个扩展。在解决方案资源管理器中右键单击项目时,它会在关联菜单中添加一个按钮。当您单击此按钮时,它会更改该项目的一些调试设置,以便该项目可以调试 但是,我还需要使其与Visual Studio 2017兼容。从菜单中出现的按钮来看,一切似乎都很好。我使用dte2对象获取当前选定的项目,然后使用该对象获取选定的项目。从中我得到了活动配置,并使用它来更改项目的属性 在我得到配置对象之前,一切正常。我可以获取对象,但当我尝试获取conf

我使用VSIX项目模板为Visual Studio 2015构建了一个扩展。在解决方案资源管理器中右键单击项目时,它会在关联菜单中添加一个按钮。当您单击此按钮时,它会更改该项目的一些调试设置,以便该项目可以调试

但是,我还需要使其与Visual Studio 2017兼容。从菜单中出现的按钮来看,一切似乎都很好。我使用dte2对象获取当前选定的项目,然后使用该对象获取选定的项目。从中我得到了活动配置,并使用它来更改项目的属性

在我得到配置对象之前,一切正常。我可以获取对象,但当我尝试获取configuration.properties时,它返回null

DTE2 dte2 = (DTE2)Package.GetGlobalService(typeof(SDTE));
SelectedItem selectedItem = dte2.SelectedItems.Item(1);
Project project = selectedItem.Project;

Configuration configuration = project.ConfigurationManager.ActiveConfiguration;
string path = configuration.Properties.Item("OutputPath").value.ToString();
在我尝试从配置中获取属性之前,一切正常。它返回null,因此使用.Item()时出现错误

这段代码在Visual Studio 2015中对我有效,但在Visual Studio 2017中不起作用。有人知道这方面的解决方案吗

这是我在谷歌做了大量研究后发现的唯一相关链接。但是这里VisualStudio团队的唯一反应是他们没有足够的信息

编辑: 这就是我最终为自己工作的原因:

DTE2 dte2 = (DTE2)Package.GetGlobalService(typeof(SDTE));
SelectedItem selectedItem = dte2.SelectedItems.Item(1);
Project project = selectedItem.Project;

VCProject vcproj = project.Object as VCProject;
VCConfiguration vcconfig = vcproj.ActiveConfiguration;
VCDebugSettings vcdebug = vcconfig.DebugSettings as VCDebugSettings;
然后VCDebugSettings对象可以编辑项目的调试属性。可以找到可用的属性

有人知道这方面的解决方案吗

如果您的项目是C++项目,可以使用VCProject获取配置对象。像这样:

 private void GetProjectProperties(object sender, EventArgs e)
        {
            DTE2 dte = (DTE2)Package.GetGlobalService(typeof(SDTE));
            VCProject prj = dte.Solution.Projects.Item(1).Object as VCProject;
            foreach (VCConfiguration vccon in prj.Configurations)
            {
                IVCRulePropertyStorage generalRule = vccon.Rules.Item("ConfigurationGeneral");

                string outputPath = vccon.OutputDirectory;

                vccon.OutputDirectory = "$(test)";
                //string test1 = generalRule.GetEvaluatedPropertyValue(2);
                string tar = generalRule.GetEvaluatedPropertyValue("TargetExt");
                string name = generalRule.GetEvaluatedPropertyValue("TargetName");
            }
}

您使用什么来包含VCProject对象。我在谷歌上搜索了一下,它说要使用
Microsoft.VisualStudio.VCProject
名称空间,但它一直给我一个找不到的错误。我找到了名称空间部分。在使用名称空间之前,我必须添加对项目的引用。但我的下一个问题是,有没有办法通过
generalRule.GetEvaluatedPropertyValue()
获得所有可用属性的列表?我试图研究相关文档,似乎无法获得所有属性的列表。我已经检查了API,似乎它没有列出项目属性的相关属性。@stevensvs5我使用的是VS2017,我已经安装了VisualStudio SDK作为安装的一部分,但仍然无法在文件夹C:\Program Files(x86)中找到Microsoft.VisualStudio.VCProjectEngine.dll\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssembly。您能告诉我您是如何获得dll的吗?我是这样做的:在解决方案资源管理器中,有一个名为References的项。右键单击该选项并选择添加引用。然后在“程序集”>“扩展”下,将显示Microsoft.VisualStudio.VCProjectEngine。选中该选项并单击“确定”。然后您可以将其包含在文件中并使用它。