c# - 罗斯林。将程序集引用添加到项目
问题描述
我正在尝试通过 Roslyn 向我的项目添加程序集引用。我有的
static void UpdateProjects(string soluiton, string assemblyPath)
{
var workspace = MSBuildWorkspace.Create();
var solution = workspace.OpenSolutionAsync(soluiton).Result;
var rewrittenSolution = solution;
var projectIds = rewrittenSolution.ProjectIds;
for (int i = 0; i < projectIds.Count; i++)
{
var addedRef = MetadataReference.CreateFromFile(assemblyPath)
.WithProperties(new MetadataReferenceProperties(MetadataImageKind.Assembly));
rewrittenSolution = rewrittenSolution.AddMetadataReference(projectIds[i], addedRef);
workspace.TryApplyChanges(rewrittenSolution);
}
}
它不起作用。当我执行 TryApplyChanges 时,Roslyn 中出现 System.NullReferenceException 错误。我做错了什么?
Stack Trace:
System.NullReferenceException
at Microsoft.CodeAnalysis.MSBuild.ProjectFile.AddMetadataReference(MetadataReference reference, AssemblyIdentity identity)
at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.ApplyMetadataReferenceAdded(ProjectId projectId, MetadataReference metadataReference)
at Microsoft.CodeAnalysis.Workspace.ApplyProjectChanges(ProjectChanges projectChanges)
at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.ApplyProjectChanges(ProjectChanges projectChanges)
at Microsoft.CodeAnalysis.Workspace.TryApplyChanges(Solution newSolution, IProgressTracker progressTracker)
at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.TryApplyChanges(Solution newSolution, IProgressTracker progressTracker)
at RoslynTestApp.Program.UpdateProjects(String soluiton, String assemblyPath)
at RoslynTestApp.Program.Main(String[] args)
谢谢!
解决方案
推荐阅读
- mysql - 如何对多个表进行 SQL 连接(FK 表有循环的结果共享 ID)
- ios - 在黑盒情况下处理丢失的 dSYM 文件
- apache-spark - 为什么 Pyspark 没有编码器
- r - 在条件之前和之后的行中添加包含数据的列
- javafx - 如何为 JavaFX TableView 列制作通用 TableColumn 渲染器
- npm - 无法解决节点项目中的对等依赖项
- c# - 为远程进程从外部调用 FreeLibraryAndExitThread
- python - 使用扩展的 django 用户模型更新配置文件模型中的数据
- mqtt - 我正在编写一个代码来读取 DHT11 值并控制 4 个继电器但温度。传感器每次都向我显示“nan”
- javascript - 有没有办法在不篡改浏览器历史状态的情况下使用后退按钮关闭模式?