我正在尝试删除一个引用,并将其替换为多个C#项目的新引用。
如何使用microsoft.build.evaluation添加新引用
using Microsoft.Build.Evaluation;
var projCollection = new ProjectCollection();
var proj = projCollection.LoadProject(csproj_filepath);
var items = proj.GetItems("Reference");
foreach(var item in items)
{
if(item. EvaluatedInclude.Equals("XYZ_reference"))
{
//remove this reference
// add new reference with new hint path etc
}
}
proj.Save();这里有documentation,但在有无元数据包含或用法示例的情况下并不是很有用。
发布于 2020-06-21 19:20:54
我不太明白到底是什么问题。例如:来自我的旧项目的小片段,用于用ProjectReference替换PackageReference,以便更容易地进行本地调试:
private void SwitchExplicitPackage(MSProject.Project project, NugetPackage package, Dictionary<string, string> projects)
{
ProjectItem item = project.GetItemsByEvaluatedInclude(package.Identity).FirstOrDefault();
if (item == null)
return;
/*
* Metadata is needed for compatibility with classic projects.
*/
MSProject.Project newProject = _projectHelper.GetLoadedProject(projects[package.Identity]);
item.UnevaluatedInclude = projects[package.Identity];
item.SetMetadataValue(REF_METADATA_PACKAGE, package.Identity);
item.SetMetadataValue(REF_METADATA_PROJECT, newProject.GetPropertyValue("ProjectGuid"));
item.SetMetadataValue(REF_METADATA_NAME , newProject.GetPropertyValue("ProjectName"));
item.ItemType = PROJECT_REF; // ProjectReference
_journalHelper.AddMessage($"Explicit dependency { package.Identity } switched to { projects[package.Identity] }", TaskErrorCategory.Message);
}事实上,这一切都归结为找到所需的引用和替换属性。保存后,Visual Studio检测到更改并请求重新加载项目,之后应用更改。
https://stackoverflow.com/questions/62478890
复制相似问题