Sto lavorando a un progetto in cui compilo progetti da una soluzione che utilizza Roslyn.La compilazione di Roslyn non risolve i riferimenti mscorlib
foreach (var projectId in solution.GetProjectDependencyGraph().GetTopologicallySortedProjects())
{
var project = solution.GetProject(projectId);
var compilation = project.GetCompilationAsync().Result;
var errors = compilation.GetDiagnostics().Where(d => d.Severity == DiagnosticSeverity.Error);
// ...
compilazione contiene errori come
errore CS0012: Il tipo 'Task' è definito in un assembly che non è riferimento. È necessario aggiungere un riferimento all'assieme 'System.Threading.Tasks, Versione = 4.0.0.0, Cultura = neutra, PublicKeyToken = b03f5f7f11d50a3a'.
Perché Roslyn non accetta un riferimento esistente a mscorlib?
- msdn for System.Threading.Task sottolinea che questo tipo è infatti situato in mscorlib.dll
- PublicKeyToken b03f5f7f11d50a3a corrisponde di mscorlib
sono lì qualche CompilationOptions
che dovrebbe prendere in considerazione? Per this thread Ho provato assemblyIdentityComparer: DesktopAssemblyIdentityComparer.Default
ma non è stato d'aiuto. Ho provato a lavorare con metadataReferenceResolver
ma non sono riuscito a trovare molte informazioni a riguardo.
Dopo la soluzione in Roslyn has no reference to System.Runtime ho implementato il codice che assicura che un progetto ha riferimenti a Mscorlib.dll, System.Core.dll, System.dll e System.Runtime.dll, in modo tale che il mio progetto e compilazione avere i riferimenti:
Nota a margine: il riferimento 7 è stato aggiunto in questo modo. Il progetto aveva già riferimenti # 1, 2 e 3, e rimuovendoli e sostituendoli con quelli di C: \ Windows \ Microsoft.NET \ Framework non ha risolto il problema.
project.MetadataReferences.ToList()
Count = 8
[0]: Assembly Path='C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll'
[1]: Assembly Path='C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll'
[2]: Assembly Path='C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Core.dll'
[3]: Assembly Path='C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.dll'
[4]: Assembly Path='C:\Users\Amadeus\Documents\GitHub\InterProcessQueue\src\MemoryMappedQueue\packages\xunit.runner.visualstudio.2.0.0-rc1-build1030\build\_common\xunit.abstractions.dll'
[5]: Assembly Path='C:\Users\Amadeus\Documents\GitHub\InterProcessQueue\src\MemoryMappedQueue\packages\xunit.assert.2.0.0-rc1-build2826\lib\portable-net45+aspnetcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.assert.dll'
[6]: Assembly Path='C:\Users\Amadeus\Documents\GitHub\InterProcessQueue\src\MemoryMappedQueue\packages\xunit.extensibility.core.2.0.0-rc1-build2826\lib\portable-net45+aspnetcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.core.dll'
[7]: Assembly Path='C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Runtime.dll'
compilation.ExternalReferences.ToList()
Count = 9
[0]: Assembly Path='C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll'
[1]: Assembly Path='C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll'
[2]: Assembly Path='C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Core.dll'
[3]: Assembly Path='C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.dll'
[4]: Assembly Path='C:\Users\Amadeus\Documents\GitHub\InterProcessQueue\src\MemoryMappedQueue\packages\xunit.runner.visualstudio.2.0.0-rc1-build1030\build\_common\xunit.abstractions.dll'
[5]: Assembly Path='C:\Users\Amadeus\Documents\GitHub\InterProcessQueue\src\MemoryMappedQueue\packages\xunit.assert.2.0.0-rc1-build2826\lib\portable-net45+aspnetcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.assert.dll'
[6]: Assembly Path='C:\Users\Amadeus\Documents\GitHub\InterProcessQueue\src\MemoryMappedQueue\packages\xunit.extensibility.core.2.0.0-rc1-build2826\lib\portable-net45+aspnetcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.core.dll'
[7]: Assembly Path='C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Runtime.dll'
[8]: Compilation (C#): MemoryMappedQueue
- Come posso ottenere Roslyn per compilare questo progetto?
- C'è qualche
CompilationOptions
che dovrei usare? - È correlato a Roslyn's issue #970?
[Assomiglia a questo] (https://support.microsoft.com/en-us/kb/2971005). È ancora di qualità beta, zoppicante aggiungendo il riferimento. Si trova nella sottodirectory * Facades *. –
Sì, è simile a questo, ma questa soluzione non ha risolto il problema. Proverò a pubblicare una soluzione minima in cui questo problema si verifica. –