【问题标题】:How do I get enumerate the PropertyGroup elements in a csproj file from powershell如何从 powershell 枚举 csproj 文件中的 PropertyGroup 元素
【发布时间】:2015-03-06 11:31:18
【问题描述】:

我正在 powershell 中编写一个 nuget 安装脚本,我想访问项目文件 (*.csproj) 的所有 PropertyGroup 元素?

我可以访问一个名为 $project 的变量,它代表一个对象,我相信它可以实现来自 EnvDTE 的 Project 接口 - 项目文件 (*.csproj) 的抽象。

如何从 $project 对象中获取 PropertyGroup 实例?

我希望 nuget install powershell 脚本能够更改 包含此子元素的所有 PropertyGroup 元素的 OutputPath。

【问题讨论】:

  • 有些人可能会遇到不包含代码的问题。我知道 PowerShell,但不了解您的环境或 nuget,因此如果没有更多信息,将无法为您提供帮助。 DV 和 VTC 应该只是路上的一个颠簸。不过,没有任何理由证明该评论是合理的。
  • 我没有投任何票仅供参考,我只是想潜在地解释投了票的人的行为。我不参与这个
  • FWIW,这个问题对我来说包含了足够的信息

标签: powershell nuget envdte


【解决方案1】:

PropertyGroup 是 .csproj 文件的内部实现(MSBuild 技术),而 EnvDTE.Project 是一个接口,因此使用 EnvDTE.Project 您无法直接获取或修改 MSBuild 元素,因为实际上在 VS 2005 之前 .csproj 不是基于 MSBuild 的,并且 EnvDTE.Project 接口已经存在并且可以使用以前的技术。

但是作为一个界面,你当然可以完成你的任务:

OutputPath 是每个项目配置的属性。您可以获得 EnvDTE.Project 的所有配置,如下所述:

HOWTO: Get the projects configurations / platforms from a Visual Studio add-in

(插件使用EnvDTE)

一旦你有了 EnvDTE.Configuration,你就可以访问它的 EnvDTE.Configuration.Properties 集合,特别是“OutputPath”。见:

HOWTO: Get the output build folder from a Visual Studio add-in or macro

更改所有项目配置后,您可以调用EnvDTE.Project.SaveEnvDTE.Project.SaveAs 传递EnvDTE.Project.FullName 值作为参数。

【讨论】:

  • 感谢您提供如此详细的答案,我会在尝试提供的解决方案后投票
  • 多么棒的文章集,终于找到我想要的了,谢谢
  • 看来你自己回答了
【解决方案2】:

我找到了这个答案,让我找到了解决方案:Transforming .csproj using nuget package

这是我在 NuGet 包中使用的脚本:

$msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1
($msbuild.Xml.PropertyGroups | Select-Object -First 1).AddProperty("TypeScriptCompileBlocked", "true")
$project.Save()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2014-02-02
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多