我在powershell中编写了一个nuget安装脚本,我想访问项目文件的所有PropertyGroup元素(* .csproj)?
我可以访问一个名为$ project的变量来代表一个对象,我相信它是从EnvDTE实现Project接口 - 项目文件的抽象(* .csproj)。
如何从$ project对象获取PropertyGroup实例?
我希望nuget install powershell脚本的功能能够改变 包含此子元素的所有PropertyGroup元素的OutputPath。
答案 0 :(得分:2)
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.Save或EnvDTE.Project.SaveAs将EnvDTE.Project.FullName值作为参数传递。
答案 1 :(得分:0)
我找到了这个答案,这使我找到了解决方案: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()