https://github.com/dotnet-campus/sourcefusion
SourceFusion is a pre-compile framework based on Roslyn. It helps you to build high-performance .NET code.
https://github.com/dotnet-campus/sourcefusion
dotnetcore dotnetframework roslyn
Last synced: 10 months ago
JSON representation
SourceFusion is a pre-compile framework based on Roslyn. It helps you to build high-performance .NET code.
- Host: GitHub
- URL: https://github.com/dotnet-campus/sourcefusion
- Owner: dotnet-campus
- Created: 2018-09-21T01:01:48.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-03-19T06:20:22.000Z (almost 2 years ago)
- Last Synced: 2025-03-28T16:21:16.746Z (10 months ago)
- Topics: dotnetcore, dotnetframework, roslyn
- Language: C#
- Homepage:
- Size: 3.97 MB
- Stars: 37
- Watchers: 4
- Forks: 2
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SourceFusion
SourceFusion 是一套预编译框架。
当项目安装 SourceFusion 了之后,项目中即可开始书写预编译代码。通过执行这些预编译代码,项目可以在编译期间执行一些平时需要在运行时执行的代码。这种方式能够将耗时的运行时代码迁移到编译期执行,大幅度提升运行时性能。
|Build|NuGet|
|--|--|
||[](https://www.nuget.org/packages/dotnetCampus.SourceFusion)|
** 由于 SourceFusion 编写过早导致技术过于陈旧且 API 设计不够现代化,更推荐你使用设计和兼容性更优的 [Telescope](https://github.com/dotnet-campus/Telescope) 代替 **
## 入门
### 安装 NuGet 包
在 NuGet 源上搜索 `SourceFusion` 寻找已发布的 NuGet 包。由于目前尚未发布正式版,所以你需要指定搜索“预编译版本”才能搜索到此包。
在需要编写预编译代码的项目中安装此 NuGet 包即可。
### 编写预编译代码
你有两种编写预编译代码的方法:
1. 纯文本代码转换;
1. 模板转换。
以下代码为纯文本预编译代码的 Hello World 实现。HelloWorldTransformer.cs 中的 `Transform` 方法将在编译期间执行,用于将 HelloWorld.cs 文件中的输出改为 `Hello World!`。
```csharp
[CompileTimeCode("HelloWorld.cs")]
public class HelloWorldTransformer : IPlainCodeTransformer
{
public string Transform(string originalText, TransformingContext context)
{
return originalText.Replace("Hello", "Hello World!");
}
}
```
```csharp
using System;
public class HelloWorld
{
public void SayHello()
{
Console.WriteLine("Hello");
}
}
```
以下代码为模板转换的 Hello World 实现:
```csharp
using System;
namespace SourceFusion.Tests
{
[CompileTimeTemplate]
public class HelloWorld
{
public void SayHello()
{
var outputs = Placeholder.Array(context =>
{
// 这里使用两个引号来转义一个引号,最终我们得到了一个包含三个单词部分的数组。
return @"""Hello "", ""World"", ""!""";
});
foreach (var output in outputs)
{
Console.Write(output);
}
}
}
}
```
## 为此项目开发
非常期望你能加入到 SourceFusion 的开发中来,请阅读 [如何为 SourceFusion 贡献代码](/docs/how-to-contribute.md) 了解开发相关的约定和技术要求。