private void AssertBuild( string[] targets, Action <BuildResult, MockLogger> assert, bool buildDeclaredReference = false, bool buildUndeclaredReference = false, bool addContinueOnError = false, bool excludeReferencesFromConstraints = false, bool isolateProjects = true, Func <string, string> projectReferenceModifier = null, Func <string, string> msbuildOnDeclaredReferenceModifier = null) { var rootProjectFile = CreateTmpFile(_env).Path; var declaredReferenceFile = CreateTmpFile(_env).Path; var undeclaredReferenceFile = CreateTmpFile(_env).Path; var projectContents = string.Format( _project.Cleanup(), projectReferenceModifier?.Invoke(declaredReferenceFile) ?? declaredReferenceFile, msbuildOnDeclaredReferenceModifier?.Invoke(declaredReferenceFile) ?? declaredReferenceFile, undeclaredReferenceFile, addContinueOnError ? "ContinueOnError='WarnAndContinue'" : string.Empty, excludeReferencesFromConstraints ? $"{declaredReferenceFile};{undeclaredReferenceFile}" : string.Empty, NativeMethodsShared.IsMono ? "CodeTaskFactory" : "RoslynCodeTaskFactory") .Cleanup(); File.WriteAllText(rootProjectFile, projectContents); File.WriteAllText(declaredReferenceFile, _declaredReference); File.WriteAllText(undeclaredReferenceFile, _undeclaredReference); var buildParameters = _buildParametersPrototype.Clone(); buildParameters.IsolateProjects = isolateProjects; using (var buildManagerSession = new Helpers.BuildManagerSession(_env, buildParameters)) { if (buildDeclaredReference) { buildManagerSession.BuildProjectFile(declaredReferenceFile, new[] { "DeclaredReferenceTarget" }) .OverallResult.ShouldBe(BuildResultCode.Success); } var result = buildManagerSession.BuildProjectFile(rootProjectFile, targets); assert(result, buildManagerSession.Logger); } TransientTestFile CreateTmpFile(TestEnvironment env) { return(NativeMethodsShared.IsMono && NativeMethodsShared.IsOSX ? env.CreateFile(new TransientTestFolder(Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid().ToString("N")))) : env.CreateFile()); } }
private void AssertBuild( string[] targets, Action <BuildResult, MockLogger> assert, bool buildDeclaredReference = false, bool buildUndeclaredReference = false, bool addContinueOnError = false, bool excludeReferencesFromConstraints = false, bool isolateProjects = true, Func <string, string> projectReferenceModifier = null, Func <string, string> msbuildOnDeclaredReferenceModifier = null) { var rootProjectFile = _env.CreateFile().Path; var declaredReferenceFile = _env.CreateFile().Path; var undeclaredReferenceFile = _env.CreateFile().Path; var projectContents = string.Format( _project.Cleanup(), projectReferenceModifier?.Invoke(declaredReferenceFile) ?? declaredReferenceFile, msbuildOnDeclaredReferenceModifier?.Invoke(declaredReferenceFile) ?? declaredReferenceFile, undeclaredReferenceFile, addContinueOnError ? "ContinueOnError='WarnAndContinue'" : string.Empty, excludeReferencesFromConstraints ? $"{declaredReferenceFile};{undeclaredReferenceFile}" : string.Empty) .Cleanup(); File.WriteAllText(rootProjectFile, projectContents); File.WriteAllText(declaredReferenceFile, _declaredReference); File.WriteAllText(undeclaredReferenceFile, _undeclaredReference); var buildParameters = _buildParametersPrototype.Clone(); buildParameters.IsolateProjects = isolateProjects; using (var buildManagerSession = new Helpers.BuildManagerSession(_env, buildParameters)) { if (buildDeclaredReference) { buildManagerSession.BuildProjectFile(declaredReferenceFile, new[] { "DeclaredReferenceTarget" }) .OverallResult.ShouldBe(BuildResultCode.Success); } if (buildUndeclaredReference) { buildManagerSession.BuildProjectFile(undeclaredReferenceFile, new[] { "UndeclaredReferenceTarget" }) .OverallResult.ShouldBe(BuildResultCode.Success); } var result = buildManagerSession.BuildProjectFile(rootProjectFile, targets); assert(result, buildManagerSession.Logger); } }