internal static string Build(Options options, int testIndex, string extraCompilerOptions, Output output, out string absoluteSourceDir) { var sourceFile = options.MakeAbsolute(options.SourceFile); var compilerpath = options.MakeAbsolute(Path.Combine(ToolsRoot, options.BuildFramework, options.Compiler)); var contractreferencedir = options.MakeAbsolute(Path.Combine(ContractReferenceDirRoot, options.BuildFramework)); var sourcedir = absoluteSourceDir = Path.GetDirectoryName(sourceFile); var outputdir = Path.Combine(sourcedir, "bin", options.BuildFramework); var extension = options.UseExe ? ".exe" : ".dll"; var targetKind = options.UseExe ? "exe" : "library"; var suffix = "_" + testIndex; if (options.GenerateUniqueOutputName) { suffix += "." + randGenerator.Next(0x10000).ToString("X4"); // enables concurrent tests on the same source file } var targetfile = Path.Combine(outputdir, Path.GetFileNameWithoutExtension(sourceFile) + suffix + extension); // add Microsoft.Contracts reference if needed if (!options.BuildFramework.Contains("v4.")) { options.References.Add("Microsoft.Contracts.dll"); } // MB: do not modify the CurrentDirectory, that could cause parallel tests to fail var resolvedReferences = ResolveReferences(options); var referenceString = ReferenceOptions(resolvedReferences); if (!Directory.Exists(outputdir)) { Directory.CreateDirectory(outputdir); } var args = String.Format("/debug /t:{4} /out:{0} {5} {3} {2} {1}", targetfile, sourceFile, referenceString, options.CompilerOptions(resolvedReferences), targetKind, extraCompilerOptions); var exitCode = RunProcess(sourcedir, compilerpath, args, output); if (exitCode != 0) { return(null); } //CopyReferenceAssemblies(resolvedReferences, outputdir); return(targetfile); }
internal static string Build(Options options, string extraCompilerOptions, Output output, out string absoluteSourceDir) { var sourceFile = options.MakeAbsolute(options.SourceFile); var compilerpath = options.MakeAbsolute(Path.Combine(ToolsRoot, options.BuildFramework, options.Compiler)); var contractreferencedir = options.MakeAbsolute(Path.Combine(ContractReferenceDirRoot, options.BuildFramework)); var sourcedir = absoluteSourceDir = Path.GetDirectoryName(sourceFile); var outputdir = Path.Combine(sourcedir, "bin", options.BuildFramework); var extension = options.UseExe ? ".exe" : ".dll"; var targetKind = options.UseExe ? "exe" : "library"; var suffix = "_" + options.TestInstance; if (options.GenerateUniqueOutputName) suffix += "." + randGenerator.Next(0x10000).ToString("X4"); // enables concurrent tests on the same source file var targetfile = Path.Combine(outputdir, Path.GetFileNameWithoutExtension(sourceFile) + suffix + extension); // add Microsoft.Contracts reference if needed if (!options.BuildFramework.Contains("v4.")) { options.References.Add("Microsoft.Contracts.dll"); } // MB: do not modify the CurrentDirectory, that could cause parallel tests to fail var resolvedReferences = ResolveReferences(options); var referenceString = ReferenceOptions(resolvedReferences); if (!Directory.Exists(outputdir)) { Directory.CreateDirectory(outputdir); } var args = String.Format("/debug /t:{4} /out:{0} {5} {3} {2} {1}", targetfile, sourceFile, referenceString, options.CompilerOptions(resolvedReferences), targetKind, extraCompilerOptions); var exitCode = RunProcess(sourcedir, compilerpath, args, output); if (exitCode != 0) { return null; } //CopyReferenceAssemblies(resolvedReferences, outputdir); return targetfile; }