@@ -49,8 +49,10 @@ Task("Cleanup")
4949Task ( "GitVersion" )
5050 . WithCriteria ( ! BuildSystem . IsLocalBuild )
5151 . WithCriteria ( ! AzurePipelines . IsRunningOnAzurePipelines )
52- . Does ( ( ) => {
53- GitVersion ( new GitVersionSettings {
52+ . Does ( ( ) =>
53+ {
54+ GitVersion ( new GitVersionSettings
55+ {
5456 OutputType = GitVersionOutput . BuildServer
5557 } ) ;
5658 } ) ;
@@ -153,16 +155,20 @@ Task("PrepareTestAssets:CommonTestAssets")
153155
154156 var folder = CombinePaths ( env . Folders . TestAssets , "test-projects" , project ) ;
155157
156- try {
158+ try
159+ {
157160 DotNetBuild ( folder , new DotNetBuildSettings ( )
158161 {
159162 ToolPath = env . DotNetCommand ,
160163 WorkingDirectory = folder ,
161164 Verbosity = DotNetVerbosity . Minimal
162165 } ) ;
163- } catch {
166+ }
167+ catch
168+ {
164169 // ExternalAlias has issues once in a while, try building again to get it working.
165- if ( project == "ExternAlias" ) {
170+ if ( project == "ExternAlias" )
171+ {
166172
167173 DotNetBuild ( folder , new DotNetBuildSettings ( )
168174 {
@@ -216,7 +222,8 @@ Task("PrepareTestAssets:CakeTestAssets")
216222 var toolsFolder = CombinePaths ( env . Folders . TestAssets , "test-projects" , project , "tools" ) ;
217223 var packagesConfig = CombinePaths ( toolsFolder , "packages.config" ) ;
218224
219- NuGetInstallFromConfig ( packagesConfig , new NuGetInstallSettings {
225+ NuGetInstallFromConfig ( packagesConfig , new NuGetInstallSettings
226+ {
220227 OutputDirectory = toolsFolder ,
221228 Prerelease = true ,
222229 Verbosity = NuGetVerbosity . Quiet ,
@@ -248,7 +255,8 @@ void BuildWithDotNetCli(BuildEnvironment env, string configuration)
248255 } ;
249256
250257 settings . AddFileLogger (
251- new MSBuildFileLoggerSettings {
258+ new MSBuildFileLoggerSettings
259+ {
252260 AppendToLogFile = false ,
253261 LogFile = logFileNameBase + ".log" ,
254262 ShowTimestamp = true ,
@@ -294,51 +302,51 @@ Task("Test")
294302 . IsDependentOn ( "PrepareTestAssets" )
295303 . Does ( ( ) =>
296304{
297- var testTargetFramework = useDotNetTest ? "net7.0" : "net472" ;
298- var testProjects = string . IsNullOrEmpty ( testProjectArgument ) ? buildPlan . TestProjects : testProjectArgument . Split ( ',' ) ;
299- foreach ( var testProject in testProjects )
305+ var testTargetFramework = useDotNetTest ? "net7.0" : "net472" ;
306+ var testProjects = string . IsNullOrEmpty ( testProjectArgument ) ? buildPlan . TestProjects : testProjectArgument . Split ( ',' ) ;
307+ foreach ( var testProject in testProjects )
308+ {
309+ PrintBlankLine ( ) ;
310+ var instanceFolder = CombinePaths ( env . Folders . Bin , configuration , testProject , testTargetFramework ) ;
311+ var targetPath = CombinePaths ( instanceFolder , $ "{ testProject } .dll") ;
312+
313+ if ( useDotNetTest )
300314 {
301- PrintBlankLine ( ) ;
302- var instanceFolder = CombinePaths ( env . Folders . Bin , configuration , testProject , testTargetFramework ) ;
303- var targetPath = CombinePaths ( instanceFolder , $ "{ testProject } .dll") ;
315+ var logFile = CombinePaths ( env . Folders . ArtifactsLogs , $ "{ testProject } -netsdk-result.xml") ;
316+ var arguments = $ "test \" { targetPath } \" --logger \" console;verbosity=normal\" --logger \" trx;LogFileName={ logFile } \" --blame-hang-timeout 60sec";
304317
305- if ( useDotNetTest )
306- {
307- var logFile = CombinePaths ( env . Folders . ArtifactsLogs , $ "{ testProject } -netsdk-result.xml") ;
308- var arguments = $ "test \" { targetPath } \" --logger \" console;verbosity=normal\" --logger \" trx;LogFileName={ logFile } \" --blame-hang-timeout 60sec";
318+ Console . WriteLine ( $ "Executing: dotnet { arguments } ") ;
309319
310- Console . WriteLine ( $ "Executing: dotnet { arguments } ") ;
320+ Run ( "dotnet" , arguments , instanceFolder )
321+ . ExceptionOnError ( $ "Test { testProject } failed for { testTargetFramework } ") ;
322+ }
323+ else
324+ {
325+ var logFile = CombinePaths ( env . Folders . ArtifactsLogs , $ "{ testProject } -desktop-result.xml") ;
326+
327+ // Copy xunit executable to test folder to solve path errors
328+ var xunitToolsFolder = CombinePaths ( env . Folders . Tools , "xunit.runner.console" , "tools" , "net452" ) ;
329+ var xunitInstancePath = CombinePaths ( instanceFolder , "xunit.console.exe" ) ;
330+ FileHelper . Copy ( CombinePaths ( xunitToolsFolder , "xunit.console.exe" ) , xunitInstancePath , overwrite : true ) ;
331+ FileHelper . Copy ( CombinePaths ( xunitToolsFolder , "xunit.runner.utility.net452.dll" ) , CombinePaths ( instanceFolder , "xunit.runner.utility.net452.dll" ) , overwrite : true ) ;
332+ var arguments = $ "\" { targetPath } \" -noshadow -parallel none -xml \" { logFile } \" -notrait category=failing";
311333
312- Run ( "dotnet" , arguments , instanceFolder )
334+ if ( Platform . Current . IsWindows )
335+ {
336+ Run ( xunitInstancePath , arguments , instanceFolder )
313337 . ExceptionOnError ( $ "Test { testProject } failed for { testTargetFramework } ") ;
314338 }
315339 else
316340 {
317- var logFile = CombinePaths ( env . Folders . ArtifactsLogs , $ "{ testProject } -desktop-result.xml") ;
341+ // Copy the Mono-built Microsoft.Build.* binaries to the test folder.
342+ // This is necessary to work around a Mono bug that is exasperated by xUnit.
343+ CopyMonoMSBuildBinaries ( instanceFolder ) ;
318344
319- // Copy xunit executable to test folder to solve path errors
320- var xunitToolsFolder = CombinePaths ( env . Folders . Tools , "xunit.runner.console" , "tools" , "net452" ) ;
321- var xunitInstancePath = CombinePaths ( instanceFolder , "xunit.console.exe" ) ;
322- FileHelper . Copy ( CombinePaths ( xunitToolsFolder , "xunit.console.exe" ) , xunitInstancePath , overwrite : true ) ;
323- FileHelper . Copy ( CombinePaths ( xunitToolsFolder , "xunit.runner.utility.net452.dll" ) , CombinePaths ( instanceFolder , "xunit.runner.utility.net452.dll" ) , overwrite : true ) ;
324- var arguments = $ "\" { targetPath } \" -noshadow -parallel none -xml \" { logFile } \" -notrait category=failing";
325-
326- if ( Platform . Current . IsWindows )
327- {
328- Run ( xunitInstancePath , arguments , instanceFolder )
329- . ExceptionOnError ( $ "Test { testProject } failed for { testTargetFramework } ") ;
330- }
331- else
332- {
333- // Copy the Mono-built Microsoft.Build.* binaries to the test folder.
334- // This is necessary to work around a Mono bug that is exasperated by xUnit.
335- CopyMonoMSBuildBinaries ( instanceFolder ) ;
336-
337- Run ( "mono" , $ "\" { xunitInstancePath } \" { arguments } ", instanceFolder )
338- . ExceptionOnError ( $ "Test { testProject } failed for net472") ;
339- }
345+ Run ( "mono" , $ "\" { xunitInstancePath } \" { arguments } ", instanceFolder )
346+ . ExceptionOnError ( $ "Test { testProject } failed for net472") ;
340347 }
341348 }
349+ }
342350} ) ;
343351
344352void CopyMonoMSBuildBinaries ( string outputFolder )
@@ -370,7 +378,7 @@ void CopyExtraDependencies(BuildEnvironment env, string outputFolder)
370378 FileHelper . Copy ( CombinePaths ( env . WorkingDirectory , "license.md" ) , CombinePaths ( outputFolder , "license.md" ) , overwrite : true ) ;
371379}
372380
373- void AddOmniSharpBindingRedirects ( string omnisharpFolder )
381+ void UpdateBindingRedirects ( string omnisharpFolder )
374382{
375383 var appConfig = CombinePaths ( omnisharpFolder , "OmniSharp.exe.config" ) ;
376384 if ( ! FileHelper . Exists ( appConfig ) )
@@ -397,6 +405,17 @@ void AddOmniSharpBindingRedirects(string omnisharpFolder)
397405 assemblyBinding . AppendChild ( redirect ) ;
398406 }
399407
408+ // Find Roslyn libraries
409+ foreach ( var filePath in System . IO . Directory . GetFiles ( omnisharpFolder , "Microsoft.CodeAnalysis.*.dll" ) )
410+ {
411+ // Read assembly name from Roslyn library
412+ var assemblyName = AssemblyName . GetAssemblyName ( filePath ) ;
413+
414+ // Create binding redirect and add to bindings
415+ var redirect = CreateBindingRedirect ( document , assemblyName ) ;
416+ assemblyBinding . AppendChild ( redirect ) ;
417+ }
418+
400419 runtime . AppendChild ( assemblyBinding ) ;
401420
402421 // Save updated app.config
@@ -433,7 +452,7 @@ string PublishMonoBuild(string project, BuildEnvironment env, BuildPlan plan, st
433452 DirectoryHelper . Copy ( buildFolder , outputFolder , copySubDirectories : false ) ;
434453
435454 CopyExtraDependencies ( env , outputFolder ) ;
436- AddOmniSharpBindingRedirects ( outputFolder ) ;
455+ UpdateBindingRedirects ( outputFolder ) ;
437456
438457 // Copy dependencies of Mono build
439458 FileHelper . Copy (
@@ -470,7 +489,7 @@ string PublishMonoBuildForPlatform(string project, MonoRuntime monoRuntime, Buil
470489 Run ( "chmod" , $ "+x \" { CombinePaths ( outputFolder , "run" ) } \" ") ;
471490
472491 CopyExtraDependencies ( env , outputFolder ) ;
473- AddOmniSharpBindingRedirects ( omnisharpFolder ) ;
492+ UpdateBindingRedirects ( omnisharpFolder ) ;
474493
475494 Package ( project , monoRuntime . PlatformName , outputFolder , env . Folders . ArtifactsPackage , env . Folders . DeploymentPackage ) ;
476495
@@ -555,7 +574,6 @@ Task("PublishNet6Builds")
555574 PublishBuild ( project , env , buildPlan , configuration , "linux-musl-arm64" , "net6.0" ) ;
556575 }
557576 }
558-
559577 }
560578} ) ;
561579
@@ -597,7 +615,7 @@ string PublishBuild(string project, BuildEnvironment env, BuildPlan plan, string
597615 }
598616
599617 CopyExtraDependencies ( env , outputFolder ) ;
600- AddOmniSharpBindingRedirects ( outputFolder ) ;
618+ UpdateBindingRedirects ( outputFolder ) ;
601619
602620 var platformFolder = framework != "net472" ? $ "{ rid } -{ framework } " : rid ;
603621 Package ( project , platformFolder , outputFolder , env . Folders . ArtifactsPackage , env . Folders . DeploymentPackage ) ;
@@ -645,8 +663,10 @@ Task("PublishWindowsBuilds")
645663
646664Task ( "PublishNuGet" )
647665 . IsDependentOn ( "InstallDotNetSdk" )
648- . Does ( ( ) => {
649- DotNetPack ( "." , new DotNetPackSettings ( ) {
666+ . Does ( ( ) =>
667+ {
668+ DotNetPack ( "." , new DotNetPackSettings ( )
669+ {
650670 Configuration = "Release" ,
651671 OutputDirectory = "./artifacts/nuget/" ,
652672 MSBuildSettings = new DotNetMSBuildSettings ( )
0 commit comments