获取错误:无法修改源自导入文件的评估对象

时间:2017-12-11 19:27:42

标签: c# visual-studio-2017 roslyn asp.net-core-mvc-2.0

我们正在使用Roslyn代码使用asp.net core mvc

Visual Studio 2017 15.4项目中自动生成某些.cs文件

在最近对分支进行一些更改后,我收到此错误

  

类型:System.InvalidOperationException消息:无法修改   评估对象源自导入的文件" C:\ Program   文件\ DOTNET \ SDK \ 2.0.3 \ SDKS \ Microsoft.NET.Sdk \建立\ Microsoft.NET.Sdk.DefaultItems.props&#34 ;.   堆栈:at   Microsoft.Build.Shared.ErrorUtilities.ThrowInvalidOperation(StringresourceName,   对象[] args)at   Microsoft.Build.Shared.ErrorUtilities.VerifyThrowInvalidOperation(布尔   condition,String resourceName,Object arg0)at   Microsoft.Build.Evaluation.Project.VerifyThrowInvalidOperationNotImported(ProjectRootElement   otherXml)at   Microsoft.Build.Evaluation.Project.RemoveItemHelper(ProjectItem item)   在Microsoft.Build.Evaluation.Project.RemoveItem(ProjectItem item)
  在Microsoft.CodeAnalysis.MSBuild.ProjectFile.RemoveDocument(String   文件路径)

     

在   Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.ApplyDocumentRemoved(DocumentId   documentId)at   Microsoft.CodeAnalysis.Workspace.ApplyProjectChanges(ProjectChanges   projectChanges)at   Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.ApplyProjectChanges(ProjectChanges   projectChanges)at   Microsoft.CodeAnalysis.Workspace.TryApplyChanges(解决方案newSolution,   IProgressTracker progressTracker)   Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.TryApplyChanges(解决方案   newSolution,IProgressTracker progressTracker)

    try
    {
        var solutionPath = dataAccessGeneratorConfig.Solution;

        using (var workspace = MSBuildWorkspace.Create())
        {
            var solution = workspace.OpenSolutionAsync(solutionPath).Result;

            foreach (var dataAccessSource in dataAccessGeneratorConfig.DataSources)
            {
                // Add/remove documents to the project
            }
            workspace.TryApplyChanges(solution);
            workspace.CloseSolution();
    }       
    catch (Exception ex)
    {
        // Exception Handling
    }

我咨询了其他such threadthe github page,但它没有帮助。有线索吗?

1 个答案:

答案 0 :(得分:0)

我似乎正在踩着自己。几天前我发布了another question,这个问题的根本原因就是我在那里建议的解决方案。

对于这个问题,只要我把这一行放在.csproj文件中

<PropertyGroup>
    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>

一切都按预期开始了。

如果我只有上面的行,那么类型系统似乎不知道项目中的类。 Matt Ward on this thread给出了一个很好的解释。

因此,正确的解决方案是拥有这两行。

<PropertyGroup>
  <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
  <EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>