Skip to content
This repository was archived by the owner on Jul 19, 2024. It is now read-only.

Commit 9a5123d

Browse files
author
Nehme Bilal
committed
Use MSBuildLocator to dynamically load MSBuild at run-time
Resolves #39
1 parent 93d9f42 commit 9a5123d

8 files changed

Lines changed: 59 additions & 56 deletions

File tree

NuGet/SimpleStubs.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package >
33
<metadata>
44
<id>Etg.SimpleStubs</id>
5-
<version>2.4.4</version>
5+
<version>2.4.5</version>
66
<title>SimpleStubs Mocking Framework (C#).</title>
77
<authors>Nehme Bilal</authors>
88
<owners>Microsoft</owners>

src/SimpleStubs.CodeGen/CodeGen/SimpleStubsGenerator.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using Etg.SimpleStubs.CodeGen.Config;
1212
using Etg.SimpleStubs.CodeGen.CodeGen;
1313
using System.Text;
14+
using Microsoft.Build.Locator;
1415

1516
namespace Etg.SimpleStubs.CodeGen
1617
{
@@ -23,6 +24,8 @@ public SimpleStubsGenerator(IProjectStubber projectStubber, SimpleStubsConfig co
2324
{
2425
_projectStubber = projectStubber;
2526
_config = config;
27+
28+
MSBuildLocator.RegisterDefaults();
2629
}
2730

2831
public async Task<string> GenerateStubs(string testProjectPath, string configuration, string platform)
@@ -43,6 +46,10 @@ public async Task<string> GenerateStubs(string testProjectPath, string configura
4346
}
4447
Console.WriteLine("Simplestubs encountered errors when opening the workspace; Stubs will be generated only for projects that successfully opened. Errors: " + stringBuilder.ToString());
4548
}
49+
else
50+
{
51+
Console.WriteLine("MSBuildWorkspace loaded with no errors!");
52+
}
4653

4754
if (currentProject == null)
4855
{

src/SimpleStubs.CodeGen/SimpleStubs.CodeGen.csproj

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<Import Project="..\..\packages\Microsoft.Build.Locator.1.0.7-preview-ge60d679b53\build\Microsoft.Build.Locator.props" Condition="Exists('..\..\packages\Microsoft.Build.Locator.1.0.7-preview-ge60d679b53\build\Microsoft.Build.Locator.props')" />
34
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
45
<PropertyGroup>
56
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -12,6 +13,8 @@
1213
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
1314
<FileAlignment>512</FileAlignment>
1415
<TargetFrameworkProfile />
16+
<NuGetPackageImportStamp>
17+
</NuGetPackageImportStamp>
1518
</PropertyGroup>
1619
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
1720
<DebugSymbols>true</DebugSymbols>
@@ -39,22 +42,25 @@
3942
<Reference Include="Microsoft.Build.Conversion.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
4043
<Reference Include="Microsoft.Build.Engine, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
4144
<Reference Include="Microsoft.Build.Framework, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
45+
<Reference Include="Microsoft.Build.Locator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9dff12846e04bfbd, processorArchitecture=MSIL">
46+
<HintPath>..\..\packages\Microsoft.Build.Locator.1.0.7-preview-ge60d679b53\lib\net46\Microsoft.Build.Locator.dll</HintPath>
47+
</Reference>
4248
<Reference Include="Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
4349
<Reference Include="Microsoft.Build.Utilities.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
44-
<Reference Include="Microsoft.CodeAnalysis, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
45-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Common.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.dll</HintPath>
50+
<Reference Include="Microsoft.CodeAnalysis, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
51+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Common.2.7.0\lib\netstandard1.3\Microsoft.CodeAnalysis.dll</HintPath>
4652
</Reference>
47-
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
48-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
53+
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
54+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.2.7.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
4955
</Reference>
50-
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
51-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.Workspaces.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.Workspaces.dll</HintPath>
56+
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
57+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.Workspaces.2.7.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.Workspaces.dll</HintPath>
5258
</Reference>
53-
<Reference Include="Microsoft.CodeAnalysis.Workspaces, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
54-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.2.6.1\lib\net46\Microsoft.CodeAnalysis.Workspaces.dll</HintPath>
59+
<Reference Include="Microsoft.CodeAnalysis.Workspaces, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
60+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.2.7.0\lib\net46\Microsoft.CodeAnalysis.Workspaces.dll</HintPath>
5561
</Reference>
56-
<Reference Include="Microsoft.CodeAnalysis.Workspaces.Desktop, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
57-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.2.6.1\lib\net46\Microsoft.CodeAnalysis.Workspaces.Desktop.dll</HintPath>
62+
<Reference Include="Microsoft.CodeAnalysis.Workspaces.Desktop, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
63+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.2.7.0\lib\net46\Microsoft.CodeAnalysis.Workspaces.Desktop.dll</HintPath>
5864
</Reference>
5965
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
6066
<HintPath>..\..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
@@ -189,6 +195,20 @@
189195
<Analyzer Include="..\..\packages\Microsoft.CodeAnalysis.Analyzers.1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
190196
</ItemGroup>
191197
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
198+
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
199+
<PropertyGroup>
200+
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
201+
</PropertyGroup>
202+
<Error Condition="!Exists('..\..\packages\Microsoft.Build.Locator.1.0.7-preview-ge60d679b53\build\Microsoft.Build.Locator.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Build.Locator.1.0.7-preview-ge60d679b53\build\Microsoft.Build.Locator.props'))" />
203+
<Error Condition="!Exists('..\..\packages\Microsoft.Build.Locator.1.0.7-preview-ge60d679b53\build\Microsoft.Build.Locator.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Build.Locator.1.0.7-preview-ge60d679b53\build\Microsoft.Build.Locator.targets'))" />
204+
</Target>
205+
<Import Project="..\..\packages\Microsoft.Build.Locator.1.0.7-preview-ge60d679b53\build\Microsoft.Build.Locator.targets" Condition="Exists('..\..\packages\Microsoft.Build.Locator.1.0.7-preview-ge60d679b53\build\Microsoft.Build.Locator.targets')" />
206+
<PropertyGroup>
207+
<PostBuildEvent>del $(TargetDir)\Microsoft.Build.dll
208+
del $(TargetDir)\Microsoft.Build.Framework.dll
209+
del $(TargetDir)\Microsoft.Build.Tasks.Core.dll
210+
del $(TargetDir)\Microsoft.Build.Utilities.Core.dll</PostBuildEvent>
211+
</PropertyGroup>
192212
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
193213
Other similar extension points exist, see Microsoft.Common.targets.
194214
<Target Name="BeforeBuild">

src/SimpleStubs.CodeGen/Utils/StubbingUtils.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ private static string GetDefaultReturnInvocationStatement(ITypeSymbol returnType
6464
// do not use Task.CompletedTask to stay compatible with .Net 4.5
6565
return $"return Task.FromResult(true);{System.Environment.NewLine}";
6666
}
67-
else if (returnType.MetadataName.Equals(asyncActionType.MetadataName))
67+
else if (asyncActionType != null && returnType.MetadataName.Equals(asyncActionType.MetadataName))
6868
{
6969
// do not use Task.CompletedTask to stay compatible with .Net 4.5
7070
return $"return Task.FromResult(true).AsAsyncAction();{System.Environment.NewLine}";
7171
}
72-
else if (returnType.MetadataName.Equals(asyncOperationType.MetadataName))
72+
else if (asyncOperationType != null && returnType.MetadataName.Equals(asyncOperationType.MetadataName))
7373
{
7474
var namedReturnType = (INamedTypeSymbol)returnType;
7575
var genericReturnType = namedReturnType.TypeArguments.First();

src/SimpleStubs.CodeGen/app.config

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,31 +35,6 @@
3535
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
3636
</dependentAssembly>
3737

38-
<dependentAssembly>
39-
<assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
40-
<bindingRedirect oldVersion="2.0.0.0-15.1.0.0" newVersion="15.1.0.0"/>
41-
</dependentAssembly>
42-
<dependentAssembly>
43-
<assemblyIdentity name="Microsoft.Build" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
44-
<bindingRedirect oldVersion="2.0.0.0-15.1.0.0" newVersion="15.1.0.0"/>
45-
</dependentAssembly>
46-
<dependentAssembly>
47-
<assemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
48-
<bindingRedirect oldVersion="2.0.0.0-15.1.0.0" newVersion="15.1.0.0"/>
49-
</dependentAssembly>
50-
<dependentAssembly>
51-
<assemblyIdentity name="Microsoft.Build.Conversion.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
52-
<bindingRedirect oldVersion="2.0.0.0-15.1.0.0" newVersion="15.1.0.0"/>
53-
</dependentAssembly>
54-
<dependentAssembly>
55-
<assemblyIdentity name="Microsoft.Build.Tasks.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
56-
<bindingRedirect oldVersion="2.0.0.0-15.1.0.0" newVersion="15.1.0.0"/>
57-
</dependentAssembly>
58-
<dependentAssembly>
59-
<assemblyIdentity name="Microsoft.Build.Utilities.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
60-
<bindingRedirect oldVersion="2.0.0.0-15.1.0.0" newVersion="15.1.0.0"/>
61-
</dependentAssembly>
62-
6338
</assemblyBinding>
6439
</runtime>
6540
</configuration>

src/SimpleStubs.CodeGen/packages.config

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
33
<package id="Autofac" version="3.5.2" targetFramework="net461" />
4+
<package id="Microsoft.Build.Locator" version="1.0.7-preview-ge60d679b53" targetFramework="net461" />
45
<package id="Microsoft.CodeAnalysis.Analyzers" version="1.1.0" targetFramework="net461" />
5-
<package id="Microsoft.CodeAnalysis.Common" version="2.6.1" targetFramework="net461" />
6-
<package id="Microsoft.CodeAnalysis.CSharp" version="2.6.1" targetFramework="net461" />
7-
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="2.6.1" targetFramework="net461" />
8-
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="2.6.1" targetFramework="net461" />
6+
<package id="Microsoft.CodeAnalysis.Common" version="2.7.0" targetFramework="net461" />
7+
<package id="Microsoft.CodeAnalysis.CSharp" version="2.7.0" targetFramework="net461" />
8+
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="2.7.0" targetFramework="net461" />
9+
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="2.7.0" targetFramework="net461" />
910
<package id="Microsoft.Composition" version="1.0.27" targetFramework="net461" />
1011
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net461" />
1112
<package id="System.AppContext" version="4.3.0" targetFramework="net461" />

test/TestClassLibraryTest/TestClassLibraryTest.csproj

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,20 @@
4444
<HintPath>..\..\packages\Autofac.3.5.2\lib\net40\Autofac.dll</HintPath>
4545
<Private>True</Private>
4646
</Reference>
47-
<Reference Include="Microsoft.CodeAnalysis, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
48-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Common.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.dll</HintPath>
47+
<Reference Include="Microsoft.CodeAnalysis, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
48+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Common.2.7.0\lib\netstandard1.3\Microsoft.CodeAnalysis.dll</HintPath>
4949
</Reference>
50-
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
51-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
50+
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
51+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.2.7.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
5252
</Reference>
53-
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
54-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.Workspaces.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.Workspaces.dll</HintPath>
53+
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
54+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.Workspaces.2.7.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.Workspaces.dll</HintPath>
5555
</Reference>
56-
<Reference Include="Microsoft.CodeAnalysis.Workspaces, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
57-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.2.6.1\lib\net46\Microsoft.CodeAnalysis.Workspaces.dll</HintPath>
56+
<Reference Include="Microsoft.CodeAnalysis.Workspaces, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
57+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.2.7.0\lib\net46\Microsoft.CodeAnalysis.Workspaces.dll</HintPath>
5858
</Reference>
59-
<Reference Include="Microsoft.CodeAnalysis.Workspaces.Desktop, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
60-
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.2.6.1\lib\net46\Microsoft.CodeAnalysis.Workspaces.Desktop.dll</HintPath>
59+
<Reference Include="Microsoft.CodeAnalysis.Workspaces.Desktop, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
60+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.2.7.0\lib\net46\Microsoft.CodeAnalysis.Workspaces.Desktop.dll</HintPath>
6161
</Reference>
6262
<Reference Include="System" />
6363
<Reference Include="System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">

test/TestClassLibraryTest/packages.config

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
<packages>
33
<package id="Autofac" version="3.5.2" targetFramework="net461" />
44
<package id="Microsoft.CodeAnalysis.Analyzers" version="1.1.0" targetFramework="net461" />
5-
<package id="Microsoft.CodeAnalysis.Common" version="2.6.1" targetFramework="net461" />
6-
<package id="Microsoft.CodeAnalysis.CSharp" version="2.6.1" targetFramework="net461" />
7-
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="2.6.1" targetFramework="net461" />
8-
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="2.6.1" targetFramework="net461" />
5+
<package id="Microsoft.CodeAnalysis.Common" version="2.7.0" targetFramework="net47" />
6+
<package id="Microsoft.CodeAnalysis.CSharp" version="2.7.0" targetFramework="net47" />
7+
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="2.7.0" targetFramework="net47" />
8+
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="2.7.0" targetFramework="net47" />
99
<package id="Microsoft.Composition" version="1.0.27" targetFramework="net461" />
1010
<package id="System.AppContext" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
1111
<package id="System.Collections" version="4.3.0" targetFramework="net461" />

0 commit comments

Comments
 (0)