Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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"]
            });
        }