![](/img/trans.png)
[英]Using Microsoft.Build.Evaluation to publish a database project (.sqlproj)
[英]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.