簡體   English   中英

如何使用 microsoft.build.evaluation 以編程方式添加新的 dll 參考

[英]How to add new dll reference programmatically using microsoft.build.evaluation

我正在嘗試刪除一個參考並將其替換為多個 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();

這里有文檔,但在有無元數據包含或使用示例之間的區別方面不是很有用。

我不太明白問題到底是什么。 例如:我的舊項目中的小片段,用於將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 檢測到更改並請求重新加載項目,然后應用更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM