Как программно добавить новую ссылку на dll с помощью microsoft.build.evaluation - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь удалить одну ссылку и заменить ее новой ссылкой для нескольких проектов 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();

Здесь есть документация , но она не очень полезна с точки зрения разницы между включением метаданных и без них или примером использования.

1 Ответ

0 голосов
/ 21 июня 2020

Не совсем понимаю, в чем именно проблема. Например: небольшой фрагмент из моего старого проекта для замены 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 обнаружила изменения и запросила перезагрузку проекта, после чего изменения были применены.

...