gpt4 book ai didi

visual-studio - 如何使用 IVsBuildPropertyStorage 添加 MSBuild 导入?

转载 作者:行者123 更新时间:2023-12-05 01:03:21 25 4
gpt4 key购买 nike

我正在尝试以编程方式将导入任务添加到 .csproj 文件,但我不想使用 Microsoft.Build.BuildEngine 对象来执行此操作,因为 VS 会弹出有关正在修改的项目文件的警告从 Visual Studio 外部。

我已经看到几页 [1] [2] 表明 IVsBuildPropertyStorage 接口(interface)将允许我访问 .csproj 文件的 MSBuild 部分,但我无法弄清楚如何执行此操作,或者如果它是甚至真的有可能。看起来我需要指定要访问的属性的名称,但我不确定如何弄清楚。为“导入”属性调用 GetPropertyValue() 不会为已设置的项目文件返回任何内容,我希望我的最终结果看起来如何:

EnvDTE.Project proj = ...;
var sol = Package.GetGlobalService(typeof(VsSolution)) as IVsSolution;
IVsHierarchy hier;
sol.GetProjectOfUniqueName(p.UniqueName, out hier);
var storage = hier as IVsBuildPropertyStorage;
string val;
storage.GetPropertyValue("Import", String.Empty,
(uint)_PersistStorageType.PST_PROJECT_FILE, out val);
// val is null

[1] https://mpfproj.svn.codeplex.com/svn/9.0/Tests/UnitTests/ProjectTest.cs
[2] http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/e1983591-120a-4a2f-a910-e596dd625e68

谢谢。对此我能得到任何建议,我将不胜感激。

最佳答案

我问了一个类似的问题,请看这里 Programmatically adding and editing the Targets in a Visual Studio Project File以编程方式将导入添加到项目文件的方法是使用此命名空间 http://msdn.microsoft.com/en-us/library/microsoft.build.construction.aspx它来自程序集(在 GAC 中)Microsoft.Build.dll。您可以通过大约 3-4 个步骤完成此操作:

以下是伪代码:

  1. 使用 DTE.ActiveSolutionProjects 获取项目文件位置并获取每个项目的属性。获取 FullPath 和 FileName 以获取项目文件的完整路径。
  2. 获得项目文件的完整路径后,调用 ProjectRootElement.Open静态方法:

    ProjectRootElement 项目 = ProjectRootElement.Open(projectPath);

  3. 获得 ProjectRootElement 引用后,您可以调用 AddImport方法(其中名称是项目标识符属性):

    project.AddImport(name)

应该可以的。

关于visual-studio - 如何使用 IVsBuildPropertyStorage 添加 MSBuild 导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com