我们正在使用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 thread和the github page,但它没有帮助。有线索吗?
答案 0 :(得分:0)
我似乎正在踩着自己。几天前我发布了another question,这个问题的根本原因就是我在那里建议的解决方案。
对于这个问题,只要我把这一行放在.csproj文件中
<PropertyGroup>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
一切都按预期开始了。
如果我只有上面的行,那么类型系统似乎不知道项目中的类。 Matt Ward on this thread给出了一个很好的解释。
因此,正确的解决方案是拥有这两行。
<PropertyGroup>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>