请注意,我也曾问过这个问题(带有复制代码)on Roslyn's GitHub
请注意,我已经尝试将net461,netcoreapp2.1和netstandard2.0作为项目的目标框架-每次都遇到相同的问题。
reduce
您将收到以下输出:
const findOdd = arr => arr.reduce((acc, d, i, list) => {
if (!acc[d]) {
acc[d] = 0;
}
acc[d]++;
if (i === list.length - 1) {
return Object.keys(acc)
.reduce((subAcc, key) => ({
...subAcc,
...(acc[key] % 2 === 0 ? {} : {
[key]: acc[key]
})
}), {})
}
return acc;
}, {})
所以我的问题是如何解决以上错误并让DownstreamLibrary进行编译?
编辑 我99%确信根本原因是此错误
无法从程序集Microsoft.Build.Tasks.Core,版本= 15.1.0.0中加载“ Microsoft.Build.Tasks.ResolveNonMSBuildProjectOutput”任务
我已经用procmon确认它正在加载以下已通过ILSpy 确认的DLL(C:\ Program Files \ dotnet \ sdk \ 2.1.602 \ Microsoft.Build.Tasks.Core.dll)。 中没有ResolveNonMSBuildProjectOutput任务。此DLL did 的较旧版本具有此任务。
答案 0 :(得分:2)
我找到了此WorkspaceFailed错误的手动解决方法:
[失败]在处理with消息时,Msbuild失败:无法从程序集Microsoft.Build.Tasks.Core,版本= 15.1.0.0,Culture = neutral,程序集加载“ Microsoft.Build.Tasks.ResolveNonMSBuildProjectOutput”任务。 PublicKeyToken = b03f5f7f11d50a3a。确认声明正确无误,并保证程序集及其所有依赖项都可用,并且任务包含实现Microsoft.Build.Framework.ITask的公共类。
有一些解决步骤:
1.0.0/ 1.0.0-rc4-004771/ 2.0.3/ 2.1.505/
1.0.0-preview1-002702/ 1.0.3/ 2.1.202/ 3.1.100/
1.0.0-preview2-003121/ 1.0.4/ 2.1.4/ 3.1.201/
1.0.0-preview4-004233/ 1.1.0/ 2.1.502/ NuGetFallbackFolder/
成功!这个错误已经消失了,但是运行我的roslyn应用程序然后导致了一些错误,例如(路径被剥离)
[失败]处理带有消息的文件时,Msbuild失败“ ProcessFrameworkReferences”任务意外失败。 System.IO.FileNotFoundException:无法加载文件或程序集'NuGet.Frameworks,版本= 5.5.0.4,区域性=中性,PublicKeyToken = 31bf3856ad364e35'。该系统找不到指定的文件。文件名:'NuGet.Frameworks,版本= 5.5.0.4,文化=中性,PublicKeyToken = 31bf3856ad364e35'
通过在我的项目中添加NuGet.ProjectModel 5.5.1解决了这一问题,csproj现在具有以下程序包引用:
<ItemGroup>
<PackageReference Include="Microsoft.Build" Version="16.5.0" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.Build.Framework" Version="16.5.0" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.Build.Locator" Version="1.2.6" />
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="16.5.0" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.CodeAnalysis" Version="3.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="3.5.0" />
<PackageReference Include="NuGet.ProjectModel" Version="5.5.1" />
</ItemGroup>
此代码不再有WorkspaceFailed事件:
Microsoft.Build.Locator.MSBuildLocator.RegisterDefaults();
var workspace = MSBuildWorkspace.Create();
workspace.WorkspaceFailed += (s, e) => { Console.WriteLine(e.Diagnostic); };
var project = await workspace.OpenProjectAsync(@"C:/path/to.csproj");
我正在与Roslyn一起加载的csproj如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<OutputType>Library</OutputType>
<ApplicationIcon />
<StartupObject />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\dependencies\some.csproj" />
</ItemGroup>
</Project>