【问题标题】:How to add new dll reference programmatically using microsoft.build.evaluation如何使用 microsoft.build.evaluation 以编程方式添加新的 dll 引用
【发布时间】:2020-06-19 21:38:35
【问题描述】:

我正在尝试删除一个引用并将其替换为多个 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,但在有无元数据包含或使用示例之间的区别方面不是很有用。

【问题讨论】:

    标签: c# .net visual-studio msbuild microsoft.build.evaluation


    【解决方案1】:

    我不太明白到底是什么问题。例如:我的旧项目中的 small sn-p 用于将 PackageReference 替换为 ProjectReference 以便于本地调试:

        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 检测到更改并请求重新加载项目,然后应用更改。

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 2011-08-01
      • 1970-01-01
      • 2010-10-10
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多