Example #1
0
 internal void Compile(ArgumentsFile argumentsFile)
 {
     PackageDirectory.Delete(_targetDirectory);
     PackageDirectory.Create(_targetDirectory);
     foreach (var file in argumentsFile.Compile)
     {
         var fileName = Path.GetFileNameWithoutExtension(file);
         var text     = File.ReadAllText(file);
         if (text.Contains("GenerateGenericFromThis", StringComparison.Ordinal))
         {
             var generatedCodes = Compile(text, argumentsFile.DefineConstants);
             foreach (var pair in generatedCodes)
             {
                 var filePath = Path.Combine(
                     _targetDirectory.FullName,
                     $"{fileName}.{pair.Key}.cs");
                 File.WriteAllText(filePath, pair.Value);
             }
         }
     }
 }
Example #2
0
        internal void Run(Options options)
        {
            // 准备编译环境。
            var context = new ProjectCompilingContext(options);

            // 进行重新编译测试。
            var shouldRebuild = CheckRebuild(context);

            if (!shouldRebuild)
            {
                new MSBuildMessage($"dotnetCampus.TelescopeTask:项目已最新,无需导出编译信息。").Message();
                return;
            }

            // 清除前一次生成的文件。
            new MSBuildMessage($"dotnetCampus.TelescopeTask:删除前一次的导出结果…").Message();
            PackageDirectory.Delete(context.GeneratedCodeFolder);

            // 收集并生成类。
            new MSBuildMessage($"dotnetCampus.TelescopeTask:正在生成新的编译信息…").Message();
            var code = GenerateAttributedTypesExportCode(context.Assembly);

            if (string.IsNullOrWhiteSpace(code))
            {
                return;
            }

            // 将生成的类(编译单元)写入到文件中。
            new MSBuildMessage($"dotnetCampus.TelescopeTask:正在写入编译导出文件…").Message();
            PackageDirectory.Create(context.GeneratedCodeFolder);
            var targetFile = Path.Combine(context.GeneratedCodeFolder, "AttributedTypesExport.g.cs");

            File.WriteAllText(targetFile, code);

            // 生成本次运行的摘要。
            var resultFile = new FileInfo(Path.Combine(context.WorkingFolder, context.ToolsFolder, "Result.txt"));

            File.WriteAllText(resultFile.FullName, "");
            resultFile.LastAccessTimeUtc = DateTime.UtcNow;
        }