I'm making a tool, and using Roslyn to load a solution file and then to get the compilation for the contained projects.
But some errors arise (5000+)... these are few of them:
The following code has got two tries:
The code:
var workspace = MSBuildWorkspace.Create();
var solution = await workspace.OpenSolutionAsync(@"C:\Projects\MyLib\MyLib.sln");
var sortedProject = solution
.GetProjectDependencyGraph()
.GetTopologicallySortedProjects()
.Select(solution.GetProject);
foreach (var project in sortedProject)
{
//
// #1 - trying to compile right away
//
var compilation1 = await project.GetCompilationAsync();
var diag1 = compilation1.GetDiagnostics();
//
// #2 - compiling adding system references
//
var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location);
var project2 = project.AddMetadataReferences(
new[]
{
MetadataReference.CreateFromFile(
Path.Combine(assemblyPath, "mscorlib.dll")),
MetadataReference.CreateFromFile(
Path.Combine(assemblyPath, "System.dll")),
MetadataReference.CreateFromFile(
Path.Combine(assemblyPath, "System.Core.dll")),
});
var compilation2 = await project2.GetCompilationAsync();
var diag2 = compilation2.GetDiagnostics();
}
Roslyn version being used: 1.0.0.0-beta2
The question is:
Since I have loaded a valid solution file, saved with Visual Studio 2012, targeting .Net Framework v4.5 and compiling with success in the IDE... why do I have to add system references to make it work?.
I expected it to come with the references already... the system references to the correct .Net Framework version. It means that even #2 won't work always, because I'd have to locate the correct .Net Framework version files, instead of using the ones of the tool I am currently compiling.
EDIT
Here is the csproj
file contents:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{E8757858-B17B-43D4-AA13-412E552386DC}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DataStructures</RootNamespace>
<AssemblyName>DataStructures</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug.net45\</OutputPath>
<DefineConstants>TRACE;DEBUG;net45</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release.net45\</OutputPath>
<DefineConstants>TRACE;net45</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release.net45\DataStructures.XML</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>masb.public.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Continuous\ContinuousSet.cs" />
<Compile Include="Continuous\ContinuousSetEqualityComparer.cs" />
<Compile Include="Continuous\Interval.cs" />
<Compile Include="Continuous\ISetOperator.cs" />
<Compile Include="Continuous\PointState.cs" />
<Compile Include="Continuous\RedundancyType.cs" />
<Compile Include="EnumerableExtensions.cs" />
<Compile Include="DictionaryExtensions.cs" />
<Compile Include="IImmutable.cs" />
<Compile Include="IImmutablePrototype.cs" />
<Compile Include="Immutable\FuncCached.cs" />
<Compile Include="Immutable\IImmutableSpecificTreeBuilderWithContext.cs" />
<Compile Include="Immutable\IImmutableTreeBuilderWithContext.cs" />
<Compile Include="Immutable\IMayBeImmutable.cs" />
<Compile Include="Immutable\ImmutableSpecificTreeBuilderWithContext.cs" />
<Compile Include="Immutable\ImmutableTreeBuilderWithContext.cs" />
<Compile Include="Immutable\ImmutableTreeBuilderWithContextExtensions.cs" />
<Compile Include="Immutable\IReadableForest.cs" />
<Compile Include="Immutable\IImmutableSpecificTreeBuilder.cs" />
<Compile Include="Immutable\IImmutableTreeBuilder.cs" />
<Compile Include="Immutable\ImmutableCollection.cs" />
<Compile Include="Immutable\ImmutableForestExtensions.cs" />
<Compile Include="Immutable\ImmutableSpecificTreeBuilder.cs" />
<Compile Include="Immutable\ImmutableTreeBuilder.cs" />
<Compile Include="Immutable\ImmutableTreeBuilderExtensions.cs" />
<Compile Include="Immutable\TreeBuildingContextBase.cs" />
<Compile Include="Immutable\TreeBuildingContext.cs" />
<Compile Include="Immutable\Tree\Branch.cs" />
<Compile Include="Immutable\Tree\INodeFactory.cs" />
<Compile Include="Immutable\Tree\INonRoot.cs" />
<Compile Include="Immutable\Tree\Node.cs" />
<Compile Include="Immutable\ImmutableForest.cs" />
<Compile Include="Immutable\Tree\IBranch.cs" />
<Compile Include="Immutable\Tree\ILeaf.cs" />
<Compile Include="Immutable\Tree\INode.cs" />
<Compile Include="Immutable\Tree\IRoot.cs" />
<Compile Include="Immutable\Tree\Leaf.cs" />
<Compile Include="Immutable\Tree\NodeExtensions.cs" />
<Compile Include="Immutable\Tree\NonRoot.cs" />
<Compile Include="Immutable\Tree\Root.cs" />
<Compile Include="Immutable\Tree\RootBranch.cs" />
<Compile Include="Immutable\Tree\RootLeaf.cs" />
<Compile Include="Immutable\ImmutableTree.cs" />
<Compile Include="Immutable\Tree\Visitor.cs" />
<Compile Include="JetBrains.Annotations\JetBrains.Annotations.cs" />
<Compile Include="Monads\IOption.cs" />
<Compile Include="Monads\None.cs" />
<Compile Include="Monads\OptionExtensions.cs" />
<Compile Include="Monads\Some.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SystemExtensions\ObjectExtensions.cs" />
</ItemGroup>
<ItemGroup>
<None Include="masb.public.snk" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
I finally found an answer... I was using .Net Framework 4.6 preview to make the tool.
I uninstalled Visual Studio 2015 already, but not the framework 4.6.
So I mistakenly used it when creating the tool project, by selecting the .Net framework 4.5.3 in Visual Studio 2013 (it appears inside VS2013 after installing VS2015 CTP).
By switching the framework to 4.5 it works and loads the MetadataReferences
correctly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With