我们使用 Roslyn 代码在asp.net core mvc
项目中自动生成一些.cs文件
Visual Studio 2017 15.4
在最近对分支进行了一些更改后,我收到此错误
类型:系统。无效操作异常消息:无法修改 源自导入文件"C:\Program "的已评估对象 Files\dotnet\sdk\2.0.3\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.DefaultItems.props". 堆栈:在 Microsoft.Build.Shared.ErrorUtilities.ThrowInvalidOperation(StringresourceName, Object[] args) at Microsoft.Build.Shared.ErrorUtilities.VerifyThrowInvalidOperation(Boolean 条件, 字符串资源名称, 对象 arg0) at Microsoft.Build.Evaluation.Project.VerifyThrowInvalidOperationNotImported(ProjectRootElement otherXml) at Microsoft.Build.Evaluation.Project.RemoveItemHelper(ProjectItem item) at Microsoft.Build.Evaluation.Project.RemoveItem(ProjectItem item)
at Microsoft.CodeAnalysis.MSBuild.ProjectFile.RemoveDocument(String 文件路径)在 Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.ApplyDocumentRemoved(DocumentId documentId) at Microsoft.CodeAnalysis.Workspace.ApplyProjectChanges(ProjectChanges 项目更改) 在 Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.ApplyProjectChanges(ProjectChanges 项目更改) 在 Microsoft.CodeAnalysis.Workspace.TryApplyChanges(Solution newSolution, IProgressTracker progressTracker) at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.TryApplyChanges(Solution 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
}
我已经咨询了其他此类线程和 github 页面,但它没有帮助。有什么线索吗?
看来我正在跨过自己。几天前我发布了另一个问题,这个问题的根本原因是我在那里建议的解决方案。
对于这个问题,一旦我把这一行放在 .csproj 文件中
<PropertyGroup>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
一切都开始按预期工作。
如果我只有上面的行,类型系统似乎不知道项目中的类。马特·沃德(Matt Ward)在这个线程上给出了一个很好的解释。
因此,正确的解决方案是拥有这两行。
<PropertyGroup>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>