首页 > 解决方案 > 罗斯林。将程序集引用添加到项目

问题描述

我正在尝试通过 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)

谢谢!

标签: c#.netroslyn

解决方案


推荐阅读