public void Build() { var args = new List <string> { "build" }; if (_file != null) { args.Add(_file); } if (_framework != null) { args.Add("--framework"); args.Add(_framework); } if (_configuration != null) { args.Add("--configuration"); args.Add(_configuration); } if (_runtime != null) { args.Add("--runtime"); args.Add(_runtime); } args.Add("/verbosity:quiet"); args.Add("/nologo"); var exitCode = Exe.Run("dotnet", args, interceptOutput: true); if (exitCode != 0) { throw new Exception(Resources.BuildFailed); } }
public static Project FromFile( string file, string buildExtensionsDir, string framework = null, string configuration = null, string runtime = null) { Debug.Assert(!string.IsNullOrEmpty(file), "file is null or empty."); if (buildExtensionsDir == null) { buildExtensionsDir = Path.Combine(Path.GetDirectoryName(file), "obj"); } Directory.CreateDirectory(buildExtensionsDir); var efTargetsPath = Path.Combine( buildExtensionsDir, Path.GetFileName(file) + ".EntityFrameworkCore.targets"); using (var input = typeof(Resources).Assembly.GetManifestResourceStream( "Duotify.EFCore.EntityPartialGenerator.Resources.EntityFrameworkCore.targets") !) using (var output = File.OpenWrite(efTargetsPath)) { // NB: Copy always in case it changes input.CopyTo(output); } IDictionary <string, string> metadata; var metadataFile = Path.GetTempFileName(); try { var propertyArg = "/property:EFProjectMetadataFile=" + metadataFile; if (framework != null) { propertyArg += ";TargetFramework=" + framework; } if (configuration != null) { propertyArg += ";Configuration=" + configuration; } if (runtime != null) { propertyArg += ";RuntimeIdentifier=" + runtime; } var args = new List <string> { "msbuild", "/target:GetEFProjectMetadata", propertyArg, "/verbosity:quiet", "/nologo" }; if (file != null) { args.Add(file); } var exitCode = Exe.Run("dotnet", args); if (exitCode != 0) { throw new Exception(Resources.GetMetadataFailed); } metadata = File.ReadLines(metadataFile).Select(l => l.Split(new[] { ':' }, 2)) .ToDictionary(s => s[0], s => s[1].TrimStart()); } finally { File.Delete(metadataFile); } var platformTarget = metadata["PlatformTarget"]; if (platformTarget.Length == 0) { platformTarget = metadata["Platform"]; } return(new Project(file, framework, configuration, runtime) { AssemblyName = metadata["AssemblyName"], Language = metadata["Language"], OutputPath = metadata["OutputPath"], PlatformTarget = platformTarget, ProjectAssetsFile = metadata["ProjectAssetsFile"], ProjectDir = metadata["ProjectDir"], RootNamespace = metadata["RootNamespace"], RuntimeFrameworkVersion = metadata["RuntimeFrameworkVersion"], TargetFileName = metadata["TargetFileName"], TargetFrameworkMoniker = metadata["TargetFrameworkMoniker"] }); }