{"id":25642907,"url":"https://github.com/dotnet-campus/sourcefusion","last_synced_at":"2025-04-15T05:25:31.890Z","repository":{"id":33706861,"uuid":"149689942","full_name":"dotnet-campus/SourceFusion","owner":"dotnet-campus","description":"SourceFusion is a pre-compile framework based on Roslyn. It helps you to build high-performance .NET code.","archived":false,"fork":false,"pushed_at":"2024-03-19T06:20:22.000Z","size":4167,"stargazers_count":37,"open_issues_count":5,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-28T16:21:16.746Z","etag":null,"topics":["dotnetcore","dotnetframework","roslyn"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dotnet-campus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-09-21T01:01:48.000Z","updated_at":"2025-01-09T21:42:55.000Z","dependencies_parsed_at":"2022-07-12T16:10:56.116Z","dependency_job_id":"386038ab-d085-45c4-8c5d-de28d20279d9","html_url":"https://github.com/dotnet-campus/SourceFusion","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-campus%2FSourceFusion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-campus%2FSourceFusion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-campus%2FSourceFusion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-campus%2FSourceFusion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotnet-campus","download_url":"https://codeload.github.com/dotnet-campus/SourceFusion/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249011975,"owners_count":21198128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnetcore","dotnetframework","roslyn"],"created_at":"2025-02-23T06:16:24.585Z","updated_at":"2025-04-15T05:25:31.872Z","avatar_url":"https://github.com/dotnet-campus.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SourceFusion\n\nSourceFusion 是一套预编译框架。\n\n当项目安装 SourceFusion 了之后，项目中即可开始书写预编译代码。通过执行这些预编译代码，项目可以在编译期间执行一些平时需要在运行时执行的代码。这种方式能够将耗时的运行时代码迁移到编译期执行，大幅度提升运行时性能。\n\n|Build|NuGet|\n|--|--|\n|![](https://github.com/dotnet-campus/SourceFusion/workflows/.NET%20Core/badge.svg)|[![](https://img.shields.io/nuget/v/dotnetCampus.SourceFusion.svg)](https://www.nuget.org/packages/dotnetCampus.SourceFusion)|\n\n** 由于 SourceFusion 编写过早导致技术过于陈旧且 API 设计不够现代化，更推荐你使用设计和兼容性更优的 [Telescope](https://github.com/dotnet-campus/Telescope) 代替 **\n\n## 入门\n\n### 安装 NuGet 包\n\n在 NuGet 源上搜索 `SourceFusion` 寻找已发布的 NuGet 包。由于目前尚未发布正式版，所以你需要指定搜索“预编译版本”才能搜索到此包。\n\n在需要编写预编译代码的项目中安装此 NuGet 包即可。\n\n### 编写预编译代码\n\n你有两种编写预编译代码的方法：\n\n1. 纯文本代码转换；\n1. 模板转换。\n\n以下代码为纯文本预编译代码的 Hello World 实现。HelloWorldTransformer.cs 中的 `Transform` 方法将在编译期间执行，用于将 HelloWorld.cs 文件中的输出改为 `Hello World!`。\n\n```csharp\n[CompileTimeCode(\"HelloWorld.cs\")]\npublic class HelloWorldTransformer : IPlainCodeTransformer\n{\n    public string Transform(string originalText, TransformingContext context)\n    {\n        return originalText.Replace(\"Hello\", \"Hello World!\");\n    }\n}\n```\n\n```csharp\nusing System;\n\npublic class HelloWorld\n{\n    public void SayHello()\n    {\n        Console.WriteLine(\"Hello\");\n    }\n}\n```\n\n以下代码为模板转换的 Hello World 实现：\n\n```csharp\nusing System;\n\nnamespace SourceFusion.Tests\n{\n    [CompileTimeTemplate]\n    public class HelloWorld\n    {\n        public void SayHello()\n        {\n            var outputs = Placeholder.Array\u003cstring\u003e(context =\u003e\n            {\n                // 这里使用两个引号来转义一个引号，最终我们得到了一个包含三个单词部分的数组。\n                return @\"\"\"Hello \"\", \"\"World\"\", \"\"!\"\"\";\n            });\n            foreach (var output in outputs)\n            {\n                Console.Write(output);\n            }\n        }\n    }\n}\n```\n\n## 为此项目开发\n\n非常期望你能加入到 SourceFusion 的开发中来，请阅读 [如何为 SourceFusion 贡献代码](/docs/how-to-contribute.md) 了解开发相关的约定和技术要求。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnet-campus%2Fsourcefusion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotnet-campus%2Fsourcefusion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnet-campus%2Fsourcefusion/lists"}